mybatis中 ${}和#{}的区别

#{} 使用:

  1. 自动加上引号  
  2. 经过预编译的,是安全的。
  3. 这种取值是编译好SQL语句再取值 

${} 使用:

  1. 未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入
  2. 这种是取值以后再去编译SQL语句

 

操作使用:

如果使用 $ ,则必须使用 @Param 注解,否则 ${name} 会认为是要从参数中取名为 name 的属性
注意 ${} 做字符串拼接使用 '${}' 而不是 ${}
类似 String sql = “select ..... from tt where name='”+name+"'";
sql 拼接有注入风险

#{} 占位符,此处使用 #{name} 而不是 ‘${name}’

必须使用 ${} 场景 [基本就是拼接的意思]:

<select id="test" parameterType="String" resultMap="user_userInfo">
    select * from user order by id ${name}
</select>
<select id="test2" parameterType="String" resultMap="user_userInfo">
    select  * from ${name}
</select>

 使用  #{} 场景:

占位符赋值一般都是 #{}

posted @ 2019-11-13 19:54  Cool_Yang  阅读(200)  评论(0)    收藏  举报