SQL中,# 和 $ 用于不同的占位符语法

在 MyBatis 的 SQL 映射文件(如 .xml 文件)中,# 和 $ 用于不同的占位符语法,它们有以下区别:

#{} 占位符:

预编译处理:#{} 中的内容会被视为一个 JDBC 预编译语句的参数。MyBatis 会将其替换为 ?,并使用 PreparedStatement 来设置参数值。

防止 SQL 注入:由于使用了预编译语句,可以有效防止 SQL 注入攻击。

类型安全:MyBatis 会根据 Java 类型自动处理数据类型的转换。

示例:

XML 复制代码
 <select id="selectUsers" parameterType="int" resultType="hashmap">
      SELECT * FROM users WHERE id = #{userId}
 </select>

${} 占位符:

直接替换:${} 中的内容会被直接替换为变量的值,不会进行预编译处理。这相当于将变量值直接拼接到 SQL 字符串中。

存在 SQL 注入风险:由于是直接替换,如果输入未经严格校验,可能会导致 SQL 注入攻击。

灵活性:适用于一些动态 SQL 场景,例如表名或列名的动态替换。

示例:

XML 复制代码
<select id="selectUsersByTableName" resultType="hashmap">
      SELECT * FROM ${tableName}
</select>
相关推荐
帅气的你2 分钟前
终于解决了!Spring Boot 启动慢的 5 个优化点
java
姓蔡小朋友6 分钟前
LUA脚本
开发语言·junit·lua
Croa-vo8 分钟前
Optiver OA 气球节模拟题:拆解系统建模的核心逻辑,附避坑指南
java·数据结构·算法·leetcode·职场和发展
悟能不能悟14 分钟前
Java CheckFailedException会去获取message.properties的内容吗
java·开发语言
shang_xs17 分钟前
Java 25 ScopedValue - 作用域内安全访问的一种实现
java·开发语言·安全
小途软件17 分钟前
基于深度学习的驾驶人情绪识别
java·人工智能·pytorch·python·深度学习·语言模型
向量引擎19 分钟前
[架构师级] 压榨GPT-5.2与Sora 2的极限性能:从单体调用到高并发多模态Agent集群的演进之路(附全套Python源码与性能调优方案)
开发语言·人工智能·python·gpt·ai·ai写作·api调用
小白学大数据26 分钟前
Java 异步爬虫高效获取小红书短视频内容
java·开发语言·爬虫·python·音视频
我命由我1234527 分钟前
Android Jetpack Compose - Compose 重组、AlertDialog、LazyColumn、Column 与 Row
android·java·java-ee·kotlin·android studio·android jetpack·android-studio
solar应急响应28 分钟前
域控宕机!如何强制夺取五大角色恢复业务?
开发语言·php