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

发布时间:2023年12月28日

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

在 MyBatis 中,#{}${} 是用于在 SQL 语句中插入参数值的两种方式,它们之间有重要的区别:

  1. #{} 的使用:

    • #{} 主要用于预编译的 SQL 语句中,它会将参数值以安全的方式插入 SQL 语句中,并自动进行参数的类型转换和防止 SQL 注入攻击。
    • #{} 会将参数值包含在一个预编译的占位符中,由 MyBatis 负责处理参数值的安全拼接。
  2. ${} 的使用:

    • ${} 主要用于动态 SQL 语句中,它直接将参数值拼接到 SQL 语句中,不会进行预编译。
    • ${} 会将参数值原封不动地插入到 SQL 语句中,不会进行类型转换,也不会防止 SQL 注入攻击。因此,使用 ${} 时需要格外注意安全性。

以下是一个简单的示例来说明它们的区别:

<!-- 使用 #{}, 预编译 SQL 语句,安全性较高 -->
<select id="getUserById" resultType="User">
    SELECT * FROM users
    WHERE id = #{userId}
</select>
<!-- 使用 ${}, 动态 SQL 语句,需要注意安全性 -->
<select id="getUserByName" resultType="User">
    SELECT * FROM users
    WHERE username = '${username}'
</select>

在上述示例中,#{userId} 使用了预编译的方式,而 ${username} 直接将参数值插入到 SQL 语句中。推荐在可能的情况下使用 #{},以提高 SQL 的安全性。在动态 SQL 的情况下,如果使用 ${},要确保参数值是安全的,避免 SQL 注入的风险。

文章来源:https://blog.csdn.net/sanmansan/article/details/135254668
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。