使用 Mybatis 中 # 与 $ 区别

mybatis 框架使用好处之一就是能够动态的改变 sq l语句,而动态的 sql 语法 #{ } 和 ${ } 则有所不一样。sql

#:由于mybatis是基于 jdbc 封装的,# 解析为 jdbc 预编译(preparedstatement)的参数标记符,一个 #{} 解析成一个参数占位符。安全

$:是字符串的替换,在动态 sql 解析阶段会进行变量替换。mybatis

注意平时优先使用 #{},由于使用 ${} 会引发 sql 注入。框架

由于在 mybatis 在处理 # 时,会调用 PreparedStatement 的 set 系列方法来赋值, 而且能够安全地设置参数(=?)的值。由于 sql 语句已经预编译好了,传入参数的时候,不会从新生产 sql 语句,安全性高。处理 $ 时,就是把 ${} 替换成变量的值。学习

例:select * from emp where ename = '用户名',若是使用 $ 入参,用户名被传入例如 ‘smith or 1 = 1’,那不管 ename 是否匹配都能查到结果。spa

注意:字符串

若是在特定场景下,使用诸如 order by  ${ param },这时候就能够使用 $it

总之使用 #{} 能够有效的防止 SQL 注入,提升系统安全性。编译

 

水平有限,如有问题请留言交流!变量

互相学习,共同进步:) 转载请注明出处谢谢!

相关文章
相关标签/搜索