mybatis 中 # 与 $ 区别

本文详细介绍了MyBatis框架中动态SQL的两种语法#{}

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

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

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

注意平时优先使用 #{},因为使用 ${} 会引起 sql 注入。

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

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

注意:

如果在特定场景下,使用诸如 order by  ${ param },这时候就可以使用 $

总之使用 #{} 可以有效的防止 SQL 注入,提高系统安全性。

 

水平有限,若有问题请留言交流!

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

转载于:https://my.oschina.net/hp2017/blog/1571527

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值