MyBatis 中 $ 和 # 的区别:参数占位符详解
在 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 著作权归作者所有。请勿转载和采集!