版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/104809045
文章目录
本篇博客主要讲解的是 MyBatis 中两种 动态 SQL 的语法:
#{}
和${}
。相信大学在学习 MyBatis 的时候,都会使用到
#{}
,而对${}
没怎么用过和见过,那是因为现在#{}
已经彻底替换了${}
,使用${}
太不安全了。
一、#{} 与 ${} 的区别
对于这两者的区别,大家先了解下
#
和$
:#
相当于对数据 加上 双引号,$
相当于直接显示数据。
#{}
与${}
他们都是用于进行参数处理。
#{}
:在进行 SQL 预编译时,会把参数部分用一个占位符?
代替,这样可以防止 SQL 注入。
${}
:它不会对参数进行任何处理,直接放入语句中,其实就是简单的字符串替换,并且该参数会参加 SQL 的预编译,我们如果想防止 SQL 注入,必须手动过滤参数。所以现在在 MyBatis 中基本不会使用到
${}
,只要是有关参数处理的地方都用#{}
代替即可。
二、小栗子
#
的优势在于它能很大程度防止 SQL 注入,而$
不行。比如有这么一个小栗子:用户在进行一个登录操作时,后台 SQL 验证是这样的:select * from user where user_name=#{name} and password = #{pwd};
如果前台传来的用户名是
“zhangsan”
,密码是“1 or 2”
,用#
的方式就不会出现 SQL 注入的危险;但是如果换成用$
方式,这条 SQL 语句就变成了:select * from user where user_name=rookie and password = 1 or 2;
这样的话就形成了 SQL 注入。显然很不安全,所以大家在开发的时候一定要选择
#{}
,但是也要明白两者的区别。