news 2026/6/12 3:58:58

MyBatis 中,#{} 和 ${}的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MyBatis 中,#{} 和 ${}的区别

1. 底层处理机制不同

  • #{}(预编译占位符):采用预处理的方式执行 SQL。它会将传入的参数替换为?占位符,并在数据库端进行预编译。MyBatis 会根据参数的数据类型自动进行处理,比如字符串类型会自动加上单引号,数字类型则直接传入。
  • ${}(字符串直接替换):仅仅是在内存中进行纯粹的字符串拼接,直接将参数原样输出到 SQL 语句中,不会做任何类型的转换或自动添加引号。如果传入的是字符串且没有手动加单引号,就会因为不符合 SQL 语法而报错。

2.安全性不同(最关键的区别)

  • #{}:由于采用了预编译机制,参数值会被当作纯粹的“数据”而不是“SQL 指令”来解析,因此能够有效防止 SQL 注入攻击,安全性极高。
  • ${}:因为是直接拼接字符串,如果用户传入了恶意的 SQL 关键字(例如OR 1=1),这些内容会被数据库当作合法的 SQL 指令执行,从而改变原始 SQL 的逻辑,存在极大的SQL 注入风险

3.使用场景不同

  • #{}:适用于绝大多数常规的数据传递场景,如WHERE id = #{id}INSERT INTO user(name) VALUES(#{name})等。
  • ${}:仅适用于需要动态生成 SQL 结构的特殊场景。比如你需要动态指定表名(SELECT * FROM ${tableName})、动态排序字段或方向(ORDER BY price ${sort})。因为这些是 SQL 命令或关键字,如果用#{}加上单引号变成了字符串,就会导致 SQL 语法错误。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 3:44:57

移动端语义分割实战:如何用Xception与深度可分离卷积优化DeepLabv3+模型

移动端语义分割实战:Xception与深度可分离卷积在DeepLabv3中的轻量化革命当你在手机上使用人像虚化功能时,是否想过背后的技术原理?本文将带你深入探索如何将强大的DeepLabv3语义分割模型精简优化,使其能够在资源有限的移动设备上…

作者头像 李华
网站建设 2026/6/12 3:42:24

技术干货:GPS失效后的时间崩塌与JC7601高稳晶振守时机制

在航空航天测控、雷达组网、电力同步采样、工业自动化控制等关键系统中,时间早已不是辅助参数,而是驱动一切有序运行的节拍器。然而,绝大多数系统都存在一个致命的脆弱点:过度依赖外部卫星信号(GPS/北斗)作…

作者头像 李华
网站建设 2026/6/12 3:40:54

终极免费解锁WeMod Pro会员:Wand-Enhancer完整使用指南

终极免费解锁WeMod Pro会员:Wand-Enhancer完整使用指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer Wand-Enhancer是一款专为WeMod游戏助…

作者头像 李华
网站建设 2026/6/12 3:38:54

STM32F103用I2C接PCF8575扩展GPIO,最多256路数字IO(含Keil工程+驱动源码)

本文还有配套的精品资源,点击获取 简介:这套资源提供完整的STM32F103通过I2C总线驱动PCF8575芯片实现多路GPIO扩展的解决方案。每片PCF8575提供16路双向IO,单条I2C总线上最多可挂载16片,理论支持256路数字IO输入输出。代码已适…

作者头像 李华