教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

mybatis中#{}和${}的区别是什么?

更新时间:2023年05月10日09时49分 来源:传智教育 浏览次数:

好口碑IT培训

  在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注入攻击,并且不能自动进行类型转换。因此,推荐使用#{}来替换参数。

0 分享到:
和我们在线交谈!