${}和#{}的区别

1)#{}是预编译处理,$ {}是字符串替换。
2)mybatis在处理两个字符时,处理的方式也是不同的:
		①、处理#{}时,会将sql中的#{}整体替换为占位符(即:?),调用PreparedStatement的set方法来赋值;
		②、在处理 $ { } 时,就是把 ${ } 替换成变量的值。
3)假如用${}来编写SQL会出现:恶意SQL注入,对于数据库的数据安全性就没办法保证了。以下是示例:
		恶意SQL语法注入实例:

String sql="select * from user where name=’ “+ name+” ‘and passwd=’ "+var passwd+ " ’ ";
假若把[‘or’1’='1]作为passwd传入进来.用户名随意。会出现以下结果:
select * from user = 随意’ and passwd = ‘‘or’ 1’=‘1’;
因为’1’='1’肯定成立,所以可以任何通过验证,这就无法保证数据库数据的安全。

4)使用 #{} 可以有效的防止SQL注入,提高系统安全性:

	预编译的机制。预编译是提前对SQL语句进行预编译,而后再调用SQL,注入的参数就不会再进行SQL编译。而SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译时SQL时轻而易举的通过,从而导致数据泄露。而预编译机制则可以很好的防止SQL注入。
  • 16
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶一码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值