#{}和${}的区别是什么?
#{}:是预编译处理,可以防止SQL注入
${}:是字符串替换
例如:
在Mybatis中当你进行数据库查询时SQL语句通过#{id}传值
<select id="SelecUserById" resultType="com.hzc.pojo.User" parameterType="int">
select *from user where id=#{id};
</select>
先执行
select *from user where id=?;
再通过#{id}传值进行数据库查询
如果你用${}进行传值
<select id="SelecUserById" resultType="com.hzc.pojo.User" parameterType="int">
select *from user where id=${id};
</select>
会报一个错误,提示你id类型错误,因为${}把int类型的id转化成String类型的id
解析成的sql为:select * from user where id= “id”
${}通常再EL表达式中使用,用来展示后端传递到前端的值
总结
#{}是预编译处理,$ {}是字符串替换。
mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
mybatis在处理 $ { } 时,就是把 ${ } 替换成变量的值。使用 #{} 可以有效的防止SQL注入,提高系统安全性。