在 MyBatis 中,$# 都用于表示参数占位符,但它们的使用方式和处理方式不同。

$ 符号表示直接替换,将参数按照字符串字面值直接拼接到 SQL 语句中,例如:

SELECT * FROM users WHERE name = ${name}

如果传入的参数 name 为 'Tom',则生成的 SQL 语句为:

SELECT * FROM users WHERE name = 'Tom'

# 符号表示占位符,将参数作为预编译参数进行处理,例如:

SELECT * FROM users WHERE name = #{name}

如果传入的参数 name 为 'Tom',则生成的 SQL 语句为:

SELECT * FROM users WHERE name = ?

在执行时,会使用 PreparedStatement 进行预编译,然后将参数传递给 PreparedStatement。

使用 # 符号能够有效避免 SQL 注入问题,同时也能提高 SQL 语句的重用性和可维护性。但是,如果在 SQL 语句中需要使用动态表名、列名等,就需要使用 $ 符号进行字符串拼接。


原文地址: https://www.cveoy.top/t/topic/oS6U 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录