#{key}和${key} 取值的区别
Posted 暴躁的程序猿啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#{key}和${key} 取值的区别相关的知识,希望对你有一定的参考价值。
mybatis中 #{key}和${key} 取值的区别
mapper映射文件
<select id="selectUser" resultType="com.rpf.domain.User" >
select * from user where id=${id} and name=#{name}
</select>
调用语句
List<User> users = userDao.selectUser( 1,"Jone");
生成的查询语句
select * from user where id=1 and name=?
用$取的值会直接拼接到sql 而#是一个占位符 然后再拼接
区别:
#{}以预编译的形式 将参数设置到sql语句中 相当于JDBC的PreparedStatement; 可以防止sql注入
${}取出的值直接是拼装在SQL语句中,无法防止sql注入 ,会有安全问题。
使用场景
大多数情况下 我们取参数的值应该使用#{};
某些情况下 原生jdbc不支持占位符的情况 我们就可以使用${}进行取值
如分库分表操作 按照年份分表拆分了
select * from ${year}_salary where ......;
排序
select * from table order by ${name} ${order}
以上是关于#{key}和${key} 取值的区别的主要内容,如果未能解决你的问题,请参考以下文章
选中没有选中的复选框,匹配含有某个字符串的正则,json取值的两种方法,把变量定义在外面跟里面的区别