#{key}和${key} 取值的区别

2022-03-24 15:33:49 浏览数 (1)

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}

0 人点赞