mybatis中 ${}和#{}的区别
#{} 使用:
- 自动加上引号
- 经过预编译的,是安全的。
- 这种取值是编译好SQL语句再取值
${} 使用:
- 未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入
- 这种是取值以后再去编译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>
使用 #{} 场景:
占位符赋值一般都是 #{}