#{}相当于preparestatement的占位符,${}相当于拼接字符串
1.#{}
- #{}会进行预编译,与preparestatement的占位符相同,阅读源码看出mybatis把#{}直接替换为?,通过传入的参数来进行对占位符的填充,就像我们用preparestatement一样。
- 好处:预编译,防sql注入
2.${}
- 对${}的内容原样输出,需要自己加引号实现字符串的拼接
- 缺点:不安全,不能预防sql注入
3.区别
-
1、#对传入的参数视为字符串,也就是它会预编译,select * from user where name = #{name},比如我传一个csdn,那么传过来就是 select * from user where name = ‘csdn’;
-
2、$ 将不会将传入的值进行预编译,select * from user where name=${name},比如我穿一个csdn,那么传过来就是 select * from user where name=csdn;
-
${}需要自己加引号’ ${}'进行转型