当前位置: 首页 > news >正文

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 语法错误。
http://www.jsqmd.com/news/996429/

相关文章:

  • 从钢琴键盘到五线谱:手把手教你‘数’出A大调为什么是三个升号(附调号推导实战)
  • AI巨头激战:Claude神话版与GPT5.6对决,这周模型圈太炸了
  • Unix垃圾回收器重制版:重写过程、漏洞分析与复现方法揭秘
  • Windows虚拟网络声卡Scream:轻松实现局域网音频传输的完整教程
  • 从ChatGPT到芯片验证:AI如何‘读懂’SystemVerilog代码并帮你找Bug?
  • AI能预测下一条谣言吗?网络谣言传播背后的技术攻防战
  • 从零构建企业级网络监控:LibreNMS实战部署与核心功能解析
  • 5大核心功能:League Akari如何成为英雄联盟玩家的智能游戏助手
  • 2026年宜宾全屋定制品牌怎么选?从环保板材到五行美学,六家本地企业深度解析! - 优质品牌商家
  • 064、社区 Skill 最佳实践:代码审查、安全审查、测试驱动开发的技能化
  • Wan2.2-VAE:16×16×4高效压缩技术的终极指南
  • 深入拆解:连续J/F-1模式Doherty功放中的ZTC与Zpmn网络,如何用ADS进行阻抗控制与谐波优化?
  • Fiddler抓取HTTPS请求数据乱码问题的完整解决方案与步骤指南
  • NDS游戏资源编辑终极指南:如何使用Tinke零基础提取和修改任天堂DS游戏文件
  • 从数字控制器设计到机器人:离散系统稳定性在现实项目中的‘坑’与‘解’
  • 从FPD-Link到MIPI:图像传输接口的带宽计算到底有啥不同?一个案例讲清楚
  • 2026年杭州GEO优化排名十佳公司,究竟花落谁家?快来一探究竟!
  • 2026年办公智能语音转写领域观察百度网盘录音转文字实测对比怎么选
  • 基于SpringBoot+Vue的交通管理在线服务系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 2026年混凝土脱模剂行业口碑盘点:哪些公司值得关注? - 优质品牌商家
  • 独家|实探Rokid门店,偷拍整改声明之外的灰色缝隙
  • 062、Skill 组合与编排:多技能协同完成复杂任务的设计模式
  • 从AMD 3D V-Cache到手机CMOS:一文看懂混合键合(Hybrid Bonding)如何改变你的设备
  • 系统架构设计师-计算机系统基础核心考点精析
  • 从工厂到云端:拆解Android 13 RKP如何重塑设备密钥管理与安全认证
  • SART vs OS-SART:在低剂量CT扫描中,如何选择与调参才能又快又清晰?
  • QR 准谐振反激架构:当下中小功率快充的主流选择
  • 计算机毕业设计之基于大数据的淘宝电子产品数据分析的设计与实现
  • ECOD异常检测模型的可解释性到底有多强?手把手教你拆解每个特征的“异常贡献度”
  • 用AI一键总结B站长视频,学习效率直接提升10倍!