二者区别
#{}
是预编译处理,传进来的数据会加个" "
#
将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号
${}
就是字符串替换,直接替换掉占位符
$
方式一般用于传入数据库对象,例如传入表名
SQL 注入
使用 ${} 的话会导致 sql 注入。什么是 SQL 注入呢?
- 比如
select * from user where id = ${value}
value
应该是一个数值吧,然后如果对方传过来的是 001 and name = tom
,这样就相当于多加了一个条件,把SQL语句直接写进来了。
如果是攻击性的语句,例如:
001;drop table user
,直接把表给删了
所以为了防止 SQL 注入,能用 #{}
的不要去用 ${}
如果非要用 ${}
的话,那要注意防止 SQL 注入问题,可以手动判定传入的变量,进行过滤,一般 SQL 注入会输入很长的一条 SQL 语句。