Mabatis中#{}和${}的区别有哪些
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍Mabatis中#{}和${}的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!动态 sql 是 mybatis 的主要特性之一,在 mapper 中定
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
互联网科技公司排名
互联网科技工作委员会副主任毛军
美国互联网保险保险科技
易互联网科技有限公司
互联网 卓越科技
互联网 的科技创新
迪茉互联网科技
科技创新互联网企业
互联网科技大会案例
互联网科技股午盘股票涨跌
云创客互联网科技公司
现代科技和互联网有关系吗
阿里互联网科技公司
洛阳昕诺飞互联网科技有限公司
国产互联网科技公司
广州智享互联网科技
保山互联网科技靠谱吗
黑龙江互联网科技公司
中国主要互联网科技公司
利用互联网等科技手段
科技信息互联网
关于新基建和互联网科技
互联网科技的发展
合肥互联网科技公司
为想互联网科技
四个字互联网科技公司取名
互联网教育科技公司vipkid
互联网系的金融科技公司
互联网科技革命什么开始
科技互联网企业在行动