#{ }和${ }都可以从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 }的方式来获取相应的表名