在MyBatis中,#
和$
都是用于在SQL语句中引用参数的符号,但它们之间有一些区别:
- 占位符与拼接符 :
-
#parameterName
:这是一个预编译占位符,MyBatis在处理时会将其视为字符串,并在参数值前后自动添加双引号。这种方式可以有效防止SQL注入攻击,因为MyBatis会对整个SQL语句进行预编译。 -
$parameterName
:这是一个直接拼接符,MyBatis会直接将参数值拼接到SQL语句中,不做任何额外处理。这种方式不安全,因为参数值会直接暴露在SQL语句中,容易受到SQL注入攻击。
- 安全性 :
-
#
:由于使用了预编译机制,可以有效防止SQL注入,提高查询的安全性。 -
$
:由于直接拼接参数值,无法防止SQL注入,安全性较低。
- 使用建议 :
-
建议在MyBatis中优先使用
#parameterName
方式引用参数,以确保查询的安全性。 -
如果确实需要使用
$parameterName
方式,请确保参数值是安全的,或者采用其他安全措施来防止SQL注入。
总结:
-
#
是安全的预编译占位符,推荐使用。 -
$
是直接拼接符,不安全,不推荐使用。