温馨提示×

mybatis中$和井号的区别是什么

小亿
353
2023-11-23 07:13:49
栏目: 编程语言

在MyBatis中,$和#都是用于参数替换的符号,但在使用时有一些区别。

  1. #符号:参数替换时,#符号会将参数值转义并添加到SQL语句中,以防止SQL注入的攻击。在执行SQL语句时,MyBatis会使用PreparedStatement进行预编译,然后将参数值作为参数传递给预编译的SQL语句。

示例:

<select id="getUserById" resultType="com.example.User">
  SELECT * FROM user WHERE id = #{id}
</select>

在上面的示例中,#{id}将会被预编译成一个占位符,然后通过PreparedStatement传入参数值。

  1. $符号:参数替换时,$符号会将参数值直接拼接到SQL语句中,不进行转义操作。这意味着参数值直接替换到SQL语句中,可能会存在SQL注入的风险。因此,$符号一般用于动态表名或列名的替换,而不是用于替换参数值。

示例:

<select id="getUserByTableName" resultType="com.example.User">
  SELECT * FROM ${tableName}
</select>

在上面的示例中,${tableName}将会直接替换成实际的表名。

总结:

  • 使用#符号可以防止SQL注入攻击,因为参数值会被转义处理。
  • 使用$符号时要小心,避免直接将用户输入的内容作为参数值,以防止SQL注入攻击。
  • $符号通常用于动态表名或列名的替换,而#符号用于替换参数值。

0