${}是字符串替换,#{}是预编译处理。
Mybaties在处理#{}时,会先将sql语句中的#{}替换为?,然后再进行参数赋值,可以有效防止sql注入;
${}是字符串替换,即使用传入的字符串语句替换${}的位置,有sql注入风险。
sql注入,即如果使用${}的话,如select * from user where userName = ${userName},如果传入的值为“zhangsan;drop table user”,替换后的语句就为select * from user where userName = zhangsan;drop table user,则会删除此表造成损失,而#{}则是将传入的数据加一个“ ”,即传入同样的值,语句为select * from user where userName = “zhangsan;drop table user”,不会执行drop the user的操作。
${}可以在处理动态表单的时候使用。