mybatis中$的应用场景
时间: 2024-01-01 10:05:19 浏览: 70
在 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中$与#的区别, $的应用场景
#的区别是什么?
Mybatis中$和#都用于动态SQL语句中的参数绑定,但它们之间有几个区别:
1. #用于预编译,$用于值传递。#会将参数放入预编译语句中的占位符中,可以避免SQL注入,但会使SQL语句无法重用;$将参数直接拼接进SQL中,可以重用SQL语句,但有SQL注入的风险。
2. #可以自动进行类型转换,$不能自动转换。#会根据目标类型自动转换参数类型,$需要手动进行类型转换。
3. #可以在SQL中使用占位符,$不能使用。#可以在SQL语句中使用占位符进行模糊查询等操作,$只能直接拼接参数值。
因此,在使用Mybatis时,应根据具体的业务场景和需求选择使用#或$。
Mybatis中的${}和#{}使用场合
在MyBatis中,${}和#{}是用来替换SQL语句中的参数的。它们的使用场合略有不同。
${}是字符串替换,当MyBatis处理${}时,它会将SQL中的${}替换为变量的值,传入的数据不会加两边加上单引号。这种情况适用于需要动态拼接SQL语句的场景,比如动态指定表名或列名。
#{}是预编译处理,当MyBatis处理#{}时,它会将SQL中的#{}替换为?,然后调用PreparedStatement的set方法来赋值。传入的字符串会在值两边加上单引号,以确保安全性和正确性。这种情况适用于需要传入参数并进行预编译的场景,比如查询条件中的参数。
总结起来,${}适用于动态拼接SQL语句的场景,而#{}适用于传入参数并进行预编译的场景。在使用时,我们需要根据具体的需求选择合适的方式来处理参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Mybatis 中 $ 和 #千万不要乱用](https://blog.csdn.net/wyouwd1/article/details/126130428)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [Mybatis系列:Mybatis中 $ 和 # 千万不要乱用!](https://blog.csdn.net/Mrs_chens/article/details/90403648)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文