mybatis中 #{key}和${key} 取值的区别
mapper映射文件
代码语言:javascript复制<select id="selectUser" resultType="com.rpf.domain.User" >
select * from user where id=${id} and name=#{name}
</select>
调用语句
代码语言:javascript复制List<User> users = userDao.selectUser( 1,"Jone");
生成的查询语句
代码语言:javascript复制select * from user where id=1 and name=?
用$取的值会直接拼接到sql 而#是一个占位符 然后再拼接
区别:
#{}以预编译的形式 将参数设置到sql语句中 相当于JDBC的PreparedStatement; 可以防止sql注入
${}取出的值直接是拼装在SQL语句中,无法防止sql注入 ,会有安全问题。
使用场景
大多数情况下 我们取参数的值应该使用#{};
某些情况下 原生jdbc不支持占位符的情况 我们就可以使用${}进行取值
如分库分表操作 按照年份分表拆分了
代码语言:javascript复制 select * from ${year}_salary where ......;
排序
代码语言:javascript复制 select * from table order by ${name} ${order}