Mybatis中$与#的区别, $的应用场景
时间: 2024-05-27 17:13:11 浏览: 13
#的区别是什么?
Mybatis中$和#都用于动态SQL语句中的参数绑定,但它们之间有几个区别:
1. #用于预编译,$用于值传递。#会将参数放入预编译语句中的占位符中,可以避免SQL注入,但会使SQL语句无法重用;$将参数直接拼接进SQL中,可以重用SQL语句,但有SQL注入的风险。
2. #可以自动进行类型转换,$不能自动转换。#会根据目标类型自动转换参数类型,$需要手动进行类型转换。
3. #可以在SQL中使用占位符,$不能使用。#可以在SQL语句中使用占位符进行模糊查询等操作,$只能直接拼接参数值。
因此,在使用Mybatis时,应根据具体的业务场景和需求选择使用#或$。
相关问题
mybatis中$的应用场景
在 MyBatis 中,$ 符号表示直接将参数值拼接到 SQL 语句中,而不是使用预编译的参数(?)进行占位。$ 的主要应用场景是在动态 SQL 语句中,例如:
- 动态表名:$ 可以用于拼接表名,例如 SELECT * FROM ${tableName},此时 tableName 是一个变量,在 SQL 语句执行前会被替换成实际表名。
- 动态字段名:$ 还可以用于拼接字段名,例如 SELECT ${fieldName} FROM table。此时 fieldName 是一个变量,在 SQL 语句执行前会被替换成实际字段名。
- 拼接 SQL 片段:$ 可以用于拼接 SQL 片段,例如 WHERE 1=1 $condition,此时 condition 是一个变量,它包含了一段 SQL 条件语句,在 SQL 语句执行前会直接拼接到 SQL 语句中。
- 非字符串类型参数:当参数是非字符串类型时,不能使用 # 进行占位,此时必须使用 $ 进行拼接。例如 SELECT * FROM table WHERE id = ${id}。
需要注意的是,$ 存在 SQL 注入的风险,因为参数值是直接拼接到 SQL 语句中的,如果不对参数进行适当的处理,可能会导致 SQL 注入攻击。因此,在使用 $ 时,必须保证参数值的安全性。
用表格多维度整理mybatis中#{}与${}的区别
| 区别 | #{} | ${} |
| --- | --- | --- |
| 语法 | 使用#{}包含参数名,如#{paramName} | 使用${}包含参数名,如${paramName} |
| 功能 | #{}可以防止SQL注入攻击,将传入的参数自动进行预编译处理。 | ${}将传入的参数直接拼接到SQL语句中,容易受到SQL注入攻击。 |
| 数据类型 | #{}支持自动类型转换,可以将传入的参数转换为SQL语句中需要的类型。 | ${}不支持类型转换,传入什么类型就使用什么类型。 |
| 执行时机 | #{}在执行SQL语句之前进行预编译,可以提高SQL语句的执行效率。 | ${}在执行SQL语句时才进行参数替换。 |
| 应用场景 | 一般用于SQL语句的参数传递。 | 一般用于SQL语句的表名、列名等动态部分的拼接。 |
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)