1.#{}是预编译处理,是占位符,${}是字符串替换,是拼接符。
2.Mybatis在处理#{}的时候会将sql中的#{}替换成?号,调用PreparedStatement来赋值
#{}将传入的数据当作一个字符串,会对传入的数据加上一个双引号。
比如,select * from student where student_name = #{studentName}
如果传入的值为xiaoming,那么解析成sql的值为student_name="xiaoming"。
3.Mybatis在处理${}的时候就是把${}替换成变量的值,调用Statement来赋值
${}将传入的数据直接显示生成在sql中;
如:select ${fieldNmae} from student where student_age = 18
传入的参数作为要查询的字段,如果传入的值为student_name,则解析成的sql为:
select student_name from student where age = 18
4. #{}方式能够很大程度上防止sql注入。
5.${}无法防止sql注入。
6.${}方式一般用于传入数据库对象,例如列表和表名。
7.由于#{}方式具有更高的安全行,所以能用#{}的地方尽量不要使用${}。
8.Mybatis排序时使用order by动态参数时需要注意,用${}而不是#{}。