更新时间:2023年05月10日09时49分 来源:传智教育 浏览次数:
在MyBatis中,#{}和${}都是用于参数替换的占位符,但它们的行为有所不同。
#{}会将参数作为预编译的参数进行处理,可以防止SQL注入攻击,并且能够自动将传入的参数进行类型转换。在SQL执行前,#{}中的占位符会被替换成问号,然后将参数值设置到PreparedStatement中。
${}则会将参数直接拼接到SQL语句中,因此容易受到SQL注入攻击,并且不能自动进行类型转换。在SQL执行前,${}中的占位符会被替换成实际的参数值。
下面是一个简单的代码示例:
<!-- 使用#{} --> <select id="getUserById" resultType="User"> SELECT * FROM user WHERE id = #{userId} </select> <!-- 使用${} --> <select id="getUserByName" resultType="User"> SELECT * FROM user WHERE name = '${userName}' </select>
在使用#{}的情况下,userId的值会被作为预编译的参数进行处理,可以防止SQL注入攻击,并且能够自动进行类型转换。而在使用${}的情况下,userName的值会被直接拼接到SQL语句中,容易受到SQL注入攻击,并且不能自动进行类型转换。因此,推荐使用#{}来替换参数。