Mabatis中#{}和${}的区别有哪些
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍Mabatis中#{}和${}的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!动态 sql 是 mybatis 的主要特性之一,在 mapper 中定
千家信息网最后更新 2025年02月03日Mabatis中#{}和${}的区别有哪些
这篇文章主要介绍Mabatis中#{}和${}的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}。
在下面的语句中,如果 username 的值为 zhangsan,则两种方式无任何区别:
select * from user where name = #{name};select * from user where name = ${name};
其解析之后的结果均为
select * from user where name = 'zhangsan';
但是 #{} 和 ${} 在预编译中的处理是不一样的。#{} 在预处理时,会把参数部分用一个占位符 ? 代替,变成如下的 sql 语句:
select * from user where name = ?;
而 ${} 则只是简单的字符串替换,在动态解析阶段,该 sql 语句会被解析成
select * from user where name = 'zhangsan';
以上,#{} 的参数替换是发生在 DBMS 中,而 ${} 则发生在动态解析过程中。
那么,在使用过程中我们应该使用哪种方式呢?
答案是,优先使用 #{}。因为 ${} 会导致 sql 注入的问题。看下面的例子:
select * from ${tableName} where name = #{name}
在这个例子中,如果表名为
user; delete user; --
则动态解析之后 sql 如下:
select * from user; delete user; -- where name = ?;
--之后的语句被注释掉,而原本查询用户的语句变成了查询所有用户信息+删除用户表的语句,会对数据库造成重大损伤,极大可能导致服务器宕机。
但是表名用参数传递进来的时候,只能使用 ${} ,具体原因可以自己做个猜测,去验证。这也提醒我们在这种用法中要小心sql注入的问题。
以上是"Mabatis中#{}和${}的区别有哪些"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
动态
语句
参数
用户
查询
例子
内容
方式
篇文章
过程
问题
面的
重大
价值
信息
兴趣
原因
原本
只是
字符
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器时间与本机时间设置不同
合肥好盘手网络技术有限公司
数据库文件修改
不小心把数据库覆盖了
奉贤区服务器精密空调安装
有哪些软件开发框架平台
高科技的互联网五期
宁河软件开发哪个好
笨马网络技术有限公司
web动态服务器
服务器有电脑系统吗
学会计软件开发
海城网络技术学校在哪
如何登录git服务器
腾讯海外服务器需要备案吗
软件开发技术联系电话
服务器安全狗防护厦门
手游穿越无法连接到本地服务器
十堰智能软件开发有哪些
深圳德富莱软件开发工资
数据库审计干嘛的
孟津软件开发怎么选
ci框架数据库连接
迷妹怎么完成服务器的验证
服务器能屏蔽网站吗
珠海教育软件开发电话
数据库的SQL的语句更新
昆山什么是网络技术诚信经营
化学虚拟仿真实验室软件开发
浙江省税务服务器虚拟主机