mybatis #{} 和 ${} 的区别?
时间: 2023-11-23 17:47:08 浏览: 82
MyBatis中#号与美元符号的区别
5星 · 资源好评率100%
Mybatis中的#{}和${}是用于动态SQL的两种不同的占位符语法。
1. #{}:这是Mybatis中的预编译语法,表示将参数值作为一个占位符来使用。使用#{}可以避免SQL注入的风险。在SQL被预编译之后,#{}中的参数值会通过JDBC的预编译机制进行占位符替换。即使参数是字符串类型,也可以自动添加引号,使得传入的参数值在SQL中被当作字符串处理。
例如,假设有一个查询语句:
```
SELECT * FROM users WHERE username = #{username}
```
当传入参数为"John"时,会被转化为:
```
SELECT * FROM users WHERE username = 'John'
```
2. ${}:这是Mybatis中的文本替换语法,表示在生成的SQL中直接插入参数值。使用${}时,传入的参数值会被直接替换到SQL语句中,没有任何额外的处理。这种写法可以用于表名、列名等无法使用预编译的场景。但是需要注意的是,使用${}时存在SQL注入的风险,因为参数值直接嵌入到SQL语句中,没有任何过滤或转义。
例如,假设有一个查询语句:
```
SELECT * FROM ${tableName}
```
当传入参数为"users"时,会被转化为:
```
SELECT * FROM users
```
总结:
- 使用#{}可以更安全地处理参数,并且能够自动处理类型转换和特殊字符的转义。
- 使用${}可以进行更灵活的SQL拼接,但需要注意防止SQL注入的风险。
阅读全文