当前位置: 首页 > 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.gsyq.cn/news/1508202.html

相关文章:

  • 2026年PPT转PDF保姆级教程:PowerPoint和WPS详细操作指南
  • 从STL算法到现代C++:Lambda捕获列表[ ]、[=]、[]的进阶玩法与性能考量
  • 终极猫抓资源嗅探指南:3步快速搞定网页视频音频下载
  • Windows虚拟网络声卡Scream:轻松实现局域网音频传输的完整教程
  • 从ChatGPT到芯片验证:AI如何‘读懂’SystemVerilog代码并帮你找Bug?
  • 2026年宜宾全屋定制品牌怎么选?从环保板材到五行美学,六家本地企业深度解析! - 优质品牌商家
  • Fiddler抓取HTTPS请求数据乱码问题的完整解决方案与步骤指南
  • 从数字控制器设计到机器人:离散系统稳定性在现实项目中的‘坑’与‘解’
  • 2026年杭州GEO优化排名十佳公司,究竟花落谁家?快来一探究竟!
  • 从FPD-Link到MIPI:图像传输接口的带宽计算到底有啥不同?一个案例讲清楚
  • 2026年办公智能语音转写领域观察百度网盘录音转文字实测对比怎么选
  • 基于SpringBoot+Vue的交通管理在线服务系统管理系统设计与实现【Java+MySQL+MyBatis完整源码】
  • 062、Skill 组合与编排:多技能协同完成复杂任务的设计模式
  • QR 准谐振反激架构:当下中小功率快充的主流选择
  • 从AMD 3D V-Cache到手机CMOS:一文看懂混合键合(Hybrid Bonding)如何改变你的设备
  • 从TiKV到Flink:聊聊RocksDB作为存储引擎的实战选型与配置调优
  • 靠谱的长春西装定制哪个好
  • SpringBoot+Vue 火锅店管理系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 从手机拍照到AI算力:混合键合(Hybrid Bonding)技术是如何悄悄改变我们生活的?
  • AI时代的信息平权
  • PCB Layout实战避坑指南:从原理到布线的关键检查点
  • WandEnhancer终极指南:3步免费解锁WeMod高级功能
  • 6秒音频分离革命:htdemucs_6s模型让音乐分解变得简单高效
  • 制造业部门主管选Agent,不是比功能多少,而是比流程适配度
  • Flink概述:是什么、特点与应用场景
  • 从日志到瓶颈:深入剖析 jbd2 如何成为 ext4 文件系统的 IO 隐形杀手
  • 企业业务开发难找AI模型?DMXAPI 海量储备,一站式满足多样化开发需求
  • STM32CubeMX实战:RTC入侵检测与时间戳在数据安全存储中的应用
  • 自动驾驶感知基石探秘 ———— 超声波雷达的测距原理与工程实践
  • 2026年西南托盘口碑品牌观察:从木托盘到出口木箱的实用选型指南|行业分析 - 优质品牌商家