mybatis中#和$的区别
时间: 2023-07-19 13:14:24 浏览: 59
MyBatis中#号与美元符号的区别
5星 · 资源好评率100%
在MyBatis中,#和$都是用来表示SQL语句中的参数占位符,它们的主要区别在于参数的处理方式。
1. #表示的是预编译的SQL语句中的占位符,预编译可以防止SQL注入攻击,提高了SQL语句的安全性。同时,#会将参数值以字符串的形式进行替换,并在SQL语句中自动添加单引号,因此可以避免参数值中包含单引号引起的语法错误。
2. $表示的是直接替换SQL语句中的占位符,它不会对参数进行预处理,因此容易引起SQL注入攻击。同时,$将参数值直接替换到SQL语句中,不会添加任何引号,因此如果参数值是字符串类型,则需要手动添加单引号,否则会引起语法错误。
举个例子,假设有一个查询语句:
```
SELECT * FROM user WHERE id = #{id}
```
如果使用#占位符,则可以通过以下方式传入参数:
```
@Select("SELECT * FROM user WHERE id = #{id}")
User getUserById(@Param("id") int id);
```
如果使用$占位符,则可以通过以下方式传入参数:
```
@Select("SELECT * FROM user WHERE id = ${id}")
User getUserById(@Param("id") int id);
```
需要注意的是,使用$占位符需要小心,因为它容易引发SQL注入攻击。一般情况下,建议使用#占位符。
阅读全文