#{}和${}的区别是什么 -- java面试
区别
-
#{}
是预编译处理,${}
是字符串替换。 -
#{}
对应的变量会自动加上单引号,${}
对应的变量不会加上单引号 -
mybatis在处理
#{}
时,会将sql中的#{}
替换为?
号,调用PreparedStatement的set方法来赋值;mybatis在处理${}
时,就是把${}
替换成变量的值。 -
使用
#{}
可以有效的防止SQL注入,提高系统安全性。 -
在某些特殊场合下只能用
${}
,不能用#{}
,例如排序,表名做参数。 -
默认值不同,
#{
} 默认值 arg0、arg1、arg2 或 0、 1,${}
默认值param1、param2、param3
如何选择 #{} 和 ${}
能用 #{} 的地方就用 #{},尽量少用 ${}
表名作参数,或者order by 排序时用 ${}
来自:
https://my.oschina.net/u/4359742/blog/3314329