Mybatis 中#{} 和${} 的区别是什么?

在 MyBatis 中,#{}${} 都是用于动态 SQL 语句中的占位符,但是它们的作用和使用方式是不同的。下面是它们的区别:

image-20250304204947335

1. #{} —— 用于防止 SQL 注入和自动类型处理

  • #{} 是用来将参数安全地传递到 SQL 语句中,它会将传递的参数值进行预编译,并使用 JDBC 的 PreparedStatement 设置参数值。
  • 通过 #{} 插入的参数会经过 MyBatis 的类型处理器自动转换成数据库支持的类型。
  • #{} 还会避免 SQL 注入,因为它会把参数值作为参数传递,而不是直接拼接到 SQL 中。

示例代码:

<select id="selectUser" resultType="User">SELECT * FROM user WHERE id = #{userId}
</select>

在这个例子中,#{userId} 会被 MyBatis 处理成一个安全的参数传递给 SQL,而不是将 userId 的值直接拼接到 SQL 语句中。这样可以避免 SQL 注入攻击。

2. ${} —— 直接拼接字符串到 SQL 中

  • ${} 是用于将参数直接拼接到 SQL 语句中的占位符。它不会做任何的预处理或者类型转换,而是将参数的值直接插入到 SQL 语句中。
  • 使用 ${} 时需要小心,因为如果传入的参数是由用户输入的,不加以处理就会导致 SQL 注入攻击。

示例代码:

<select id="selectUser" resultType="User">SELECT * FROM user WHERE ${columnName} = #{value}
</select>

在这个例子中,${columnName} 会直接拼接到 SQL 语句中,这样可以动态地选择不同的列进行查询。如果传入的 columnName 由用户输入,可能会造成 SQL 注入风险。因此,使用 ${} 时需要非常小心,确保不会将不安全的内容拼接到 SQL 语句中。

总结:

image-20250304205526938

  • #{}:用于安全地传递参数,防止 SQL 注入,同时进行参数的类型转换。一般推荐在 SQL 查询中使用 #{}
    止 SQL 注入,同时进行参数的类型转换。一般推荐在 SQL 查询中使用 #{}
  • ${}:将参数直接拼接到 SQL 语句中,可能会带来 SQL 注入的风险。通常用于动态生成列名、表名等不容易被参数化的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/27823.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML-05NPM使用踩坑

2025-03-04-NPM使用踩坑 本文讲述了一个苦逼程序员在使用NPM的时候突然来了一记nmp login天雷&#xff0c;然后一番折腾之后&#xff0c;终究还是没有解决npm的问题&#x1f61e;&#x1f61e;&#x1f61e;,最终使用cnpm完美解决的故事。 文章目录 2025-03-04-NPM使用踩坑[toc…

Zookeeper 的核心引擎:深入解析 ZAB 协议

#作者&#xff1a;张桐瑞 文章目录 前言ZAB 协议算法崩溃恢复选票结构选票筛选消息广播 前言 ZooKeeper 最核心的作用就是保证分布式系统的数据一致性&#xff0c;而无论是处理来自客户端的会话请求时&#xff0c;还是集群 Leader 节点发生重新选举时&#xff0c;都会产生数据…

C++ Primer 动态数组

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

基于 HTML、CSS 和 JavaScript 的智能九宫格图片分割系统

目录 1 前言 2 技术实现 2.1 HTML 结构 2.2 CSS 样式 2.3 JavaScript 交互 3 代码解析 3.1 HTML 部分 3.2 CSS 部分 3.3 JavaScript 部分 4 完整代码 5 运行结果 6 总结 6.1 系统特点 6.2 使用方法 1 前言 在当今数字化的时代&#xff0c;图片处理需求日益增长。…

Java+iTextPDF,实时生成与预览PDF文件的最佳实践!

Java+iTextPDF,实时生成与预览PDF文件的最佳实践! 背景 其实公司之前的项目里是用到了帆软报表的,然而最近接了一个新项目,这个项目独立部署在甲方的独立环境中,组长的意思是不用再单独部署一套帆软报表,成本太大,用其他方式实现一下。虽然我不太理解成本大在哪儿,不…

Linux 快捷命令链接

修改mvn命令 默认手动安装后&#xff0c;命令格式为 安装路径命令 /data/apache-maven-3.8.8/bin/mvn -v更改为通用的命令模式 [root ~]# cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) [root ~]# echo $PATH /usr/local/node16/bin:/usr/local/sbin:/sbin…

论文回顾:NeoBERT:新一代 BERT

NeoBERT&#xff1a;新一代编码器&#xff0c;具有 4K 标记上下文长度&#xff0c;在 MTEB 上优于 RoBERTa 等更大的模型&#xff01; 论文链接&#xff1a;https://arxiv.org/pdf/2502.19587 摘要 NeoBERT 是下一代双向编码器&#xff1b;它融合了最先进的架构、现代数据和优…

机器视觉开发教程——封装Halcon通用模板匹配工具【含免费教程源码】

目录 引言前期准备Step1 设计可序列化的输入输出集合【不支持多线程】Step2 设计程序框架1、抽象层【IProcess】2、父类【HAlgorithm】3、子类【HFindModelTool】 Step3 设计UI结果展示 引言 通过仿照VisionPro软件二次开发Halcon的模板匹配工具&#xff0c;便于在客户端软件中…

一、OpenGL的原理解析

文章目录 OpenGL到底实现的是什么&#xff1f;OpenGL内模型数据的本质是什么&#xff1f;为什么三角形是 3D 渲染的最基本单元&#xff1f;MVP 变换&#xff08;Model-View-Projection 变换&#xff09;OpenGL渲染流程-摄像机变换OpenGL渲染流程-投影变换OpenGL渲染管线概述 Op…

大模型——CogView4:生成中英双语高清图片的开源文生图模型综合介绍

CogView4:生成中英双语高清图片的开源文生图模型综合介绍 CogView4 是由清华大学 KEG 实验室(THUDM)开发的一款开源文生图模型,专注于将文本描述转化为高质量图像。它支持中英双语提示词输入,尤其擅长理解中文提示并生成带有汉字的图像,非常适合广告设计、短视频创作等场…

网络安全法与等级保护 PPT 精华汇总

资源描述 本资源文件为《网络安全法与等级保护》的PPT精华汇总&#xff0c;内容涵盖了网络安全法与等级保护的总体框架及相关标准规范。该PPT详细介绍了网络安全法与等级保护的各个章节和条款&#xff0c;并提供了基础类和应用类的相关标准文件&#xff0c;帮助读者全面了解和…

前端知识一

&#xff08;ref函数&#xff09;1.为什么vue3中使用ref来创建响应式数据&#xff0c;而不是直接声明一个变量 import { ref } from "vue";const count ref(0); // 创建一个响应式的计数器&#xff0c;初始值为0function increment() {count.value; // 增加计数器的…

国产免费AI的IDE-TRAE

还是在AI的加持下的新的工具 在上周一次偶然的机会看到了这样的标题–用上Claude的AI编程工具Trae。 AI我还没入门&#xff0c;编程也是小白级别。Claude是什么不知道。Trae这是什么也不知道。为什么起这个名字&#xff1f;都不知道含义。 先下载吧。&#xff08;这里要说一…

解决中文乱码:字符编码全攻略 - ASCII、Unicode、UTF-8、GB2312详解

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

【Linux】进程信号——信号保存和信号捕捉

文章目录 信号保存信号相关的概念信号是如何保存的呢&#xff1f;有关信号保存的系统调用sigprocmask信号的增删查改查看pending表验证接口 信号捕捉用户态与内核态信号捕捉流程 总结 信号保存 信号相关的概念 信号递达&#xff1a;指 操作系统 将一个信号&#xff08;Signal…

计算机网络数据传输探秘:包裹如何在数字世界旅行?

计算机网络数据传输探秘:包裹如何在数字世界旅行? 一、从快递网络看数据传输本质 想象你网购了一件商品: 打包:商家用纸箱包装,贴上地址标签(数据封装)运输:包裹经过网点→分拣中心→运输车(网络节点与链路)签收:快递员核对信息后交付(数据校验与接收)数据的网络…

CyberRT(apollo) 定时器模块简述及bug分析

timer 模块 timer的定义&#xff0c;cyberrt中timer模块用于设置定时器任务&#xff0c;字面意思&#xff0c;设置设置定时周期及出发频次&#xff08;周期 or oneshot)&#xff0c;到达指定时间时间触发callback time wheel 时钟节拍轮&#xff0c;常见的定时器设计&#x…

使用ast获取py文件中所有函数与类名

当我们在创建python项目,经常需要遍历和分析代码文件&#xff0c;特别是当我们想要自动化地获取某些信息&#xff0c;比如所有的函数和类名。Python的ast&#xff08;Abstract Syntax Trees&#xff0c;抽象语法树&#xff09;模块为我们提供了一个强大的工具&#xff0c;可以方…

【C语言5】函数:库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、声明和定义

文章目录 一、函数的概念二、库函数2.1 标准库和头文件2.2 库函数的使用方法 三、自定义函数3.1 函数的语法形式 四、形参和实参4.1 实参4.2 形参4.2 实参和形参的关系 五、return 语句六、数组做函数参数七、嵌套调用和链式访问7.1 嵌套调用7.2 链式访问 八、函数的声明和定义…

【项目管理】基于 C 语言的 QQ 聊天室实现(TCP + 多线程 + SQLite3)

基于 C 语言的 QQ 聊天室(TCP + 多线程 + SQLite3) 项目功能基础功能: 登录、注册、添加好友、私聊、创建群聊、群聊扩展功能: 删除好友、注销账号、好友在线状态、群管理(拉人/踢人)、VIP 特权、邮件通知等 功能介绍:模拟QQ聊天客户端:登录界面:1、登录2、注册 //将用…