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

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

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

  1. #{} 的使用:

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

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

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


<select id="getUserById" resultType="User">
    SELECT * FROM users
    WHERE id = #{userId}
select>

<select id="getUserByName" resultType="User">
    SELECT * FROM users
    WHERE username = '${username}'
select>

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

你可能感兴趣的:(mybatis,数据库,sql)