Mybatis配置文件中#{ }和${ }的区别

#{ }和${ }都可以从map中取到相对应的值,

但是

#{ }采取的是预编译的方式(PreparedStatement)来执行sql语句,有效防止了sql注入问题

select * from book where id=? and name = ?

而${ }采用的是拼接sql的方式

select * from book where id = 2 and name ='zhangsan'

这样会存在安全问题


大多数情况下我们使用#{ }的方式来取值,

但是在遇到原生JDBC不能使用占位符的情况下

比如分表操作,排序操作等等

select * from 表名;

这个表名不可以使用占位符,取值的话可以使用${table_name }的方式来获取相应的表名 

原文地址:https://www.cnblogs.com/zhangjianbing/p/8324119.html