#{}和${}区别
#{}和${}区别
- #{}是预编译处理,可以有效的防止SQL注入
- ${}是字符串的替换(直接赋值的方法),只是对SQL字符串进行拼接, 无法阻止SQL注入
Mybatis 在处理 #{} 时,会将 sql 中的 #{}替换为占位符?,调用PreparedStatement 的 set 方法来赋值
Mybatis 在处理 时 , 就 是 把 {}时,就是把 时,就是把{}替换成变量值
在绝大数情况下都采用 #{}读取参数内容,但是一些特殊的情况还是要使用${}
- 在需要查询语句中动态制定表名
- 需要动态的指定查询中的排序字段,此时也只能使用${}
在JDBC中不支持占位符的地方,都可以使用${}