您的位置:首页 > 其它

mybatis中的#{}和${}的区别

2016-07-08 16:14 246 查看
mybatis中的#{}与${}的区别

一般如果可以使用#{}就不要使用${}符号。

1.如果是在mapper中
#{param}会产生PreparedStatement,并且可以安全地设置参数(=?)的值。以为sql语句已经预编译好了,传入参数的时候,不会重新生产sql语句。安全性高。
${parem}则直接将{}号中的param插入字符串,会产生sql注入的问题:
例如:select * from userwhere userName= ${userName} 
输出的结果为
select * from userwhere userName= “小明”

3)在特定场景下,例如如果在使用诸如order by '{param}',这时候就可以使用${}

4)#{}方式能够很大程度防止sql注入,${}方式无法防止sql注入
5)${}方式一般用于传入数据库对象,例如传入表名

字符串替换
默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。

重要:接受从用户输出的内容并提供给语句中不变的字符串,这样做是不安全的。这会导致潜在的SQL注入攻击,因此你不应该允许用户输入这些字段,或者通常自行转义并检查。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: