${} #{} 的区别
时间: 2024-05-08 22:11:31 浏览: 11
${} 和 #{} 是MyBatis中用来替换参数的两种方式,它们的区别主要体现在功能、使用场景和安全性方面。
1. 功能不同:
- ${} 是直接替换,将参数的值直接拼接到SQL语句中,不进行预处理。这意味着${}可以用于替换SQL命令或SQL关键字。
- #{} 是预处理,将参数的值作为占位符,通过预编译的方式将参数传递给SQL语句。这样可以防止SQL注入等安全问题。
2. 使用场景不同:
- 普通参数使用 #{},因为#{}可以防止SQL注入等安全问题,并且可以正确处理参数的类型。
- 如果需要传递的是SQL命令或SQL关键字,需要使用 ${},因为${}是直接替换,不进行预处理。
3. 安全性不同:
- 使用 ${} 存在安全问题,也就是SQL注入的问题。因为${}是直接替换,如果参数中包含恶意的SQL代码,可能会导致安全漏洞。
- 使用 #{} 则不存在安全问题,因为#{}是预处理的,参数值会被正确地转义和处理,不会导致SQL注入等安全问题。
下面是一个使用${}和#{}实现用户登录的示例:
使用 ${} 实现用户登录:
```xml
<select id="getUserByLogin" resultType="User">
SELECT * FROM user WHERE username = '${username}' AND password = '${password}'
</select>
```
使用 #{} 实现用户登录:
```xml
<select id="getUserByLogin" resultType="User">
SELECT * FROM user WHERE username = #{username} AND password = #{password}
</select>
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)