#{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} 取值的区别的主要内容,如果未能解决你的问题,请参考以下文章

关于字典编辑及文件读写

Map集合中,关于取值和遍历的相关操作

选中没有选中的复选框,匹配含有某个字符串的正则,json取值的两种方法,把变量定义在外面跟里面的区别

Mybatis中$和#取数据的区别

com.alibaba.fastjson和net.sf.json的区别

iOS)我应该在哪里复制和粘贴 facebook XML 片段?