#符号表示参数占位符,使用PreparedStatement来处理参数,可以防止SQL注入攻击。由于没有使用预编译处理,使用$符号可能会存在SQL注入风险。因此,在使用$符号时需要格外注意,确保传入的参数值是可信的。
在MyBatis中,#和$是两种不同的参数处理方式。
#符号表示参数占位符,使用PreparedStatement来处理参数,可以防止SQL注入攻击。在SQL查询过程中,#符号会将参数值进行预编译处理,生成一个参数占位符,然后使用安全绑定参数的方式将参数值传递给数据库。
例如:
```xml
SELECT * FROM user WHERE id = #{id}
```
$符号表示字符串替换,直接将参数值拼接到SQL语句中,不会进行预编译处理。由于没有使用预编译处理,使用$符号可能会存在SQL注入风险。因此,在使用$符号时需要格外注意,确保传入的参数值是可信的。
例如:
```xml
SELECT * FROM user WHERE name = '${name}'
```
总结来说,#符号是更安全的方式,能够防止SQL注入攻击,而$符号则相对不安全,需要谨慎使用。