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

news/2024/9/28 22:06:51/

在 MyBatis 中,#{} 和 ${} 都是用来在 SQL 语句中插入动态参数的,但是它们之间存在重要的区别:
#{} 的特点:

  • 预编译处理:当使用 #{} 时,MyBatis 会将 SQL 语句中的参数占位符转换为预编译语句 (PreparedStatement) 中的参数标记 ?。这意味着参数的实际值是在 SQL 执行时被设置的,而不是在 SQL 字符串构建时直接插入。
  • 防止 SQL 注入:由于 #{} 使用预编译语句,它可以有效地防止 SQL 注入攻击,因为参数值会被正确地转义,并且不会与 SQL 语法混淆。
  • 类型安全:#{} 支持类型处理,MyBatis 会根据提供的 Java 类型自动进行类型转换。
  • 自动转义特殊字符:对于字符串类型的参数,#{} 会自动转义特殊字符,如单引号 ' 或者反斜杠 \。

${} 的特点:

  • 文本替换:当使用 ${} 时,MyBatis 会将 SQL 语句中的参数占位符直接替换为实际的字符串值。这种替换发生在 SQL 字符串构建时。
  • 可能导致 SQL 注入:由于 ${} 不使用预编译语句,而是直接将参数值拼接到 SQL 语句中,如果参数值没有经过适当的清理或验证,就有可能导致 SQL 注入。
  • 适用于动态 SQL:通常情况下,${} 用于需要动态构建 SQL 的情况,如动态指定表名或者列名等,但即便如此,也必须确保参数值是安全的。

示例对比:
假设有一个 SQL 查询语句,它根据用户输入的 username 查找用户信息:
使用 #{}:

SELECT * FROM users WHERE username = #{username}

最终生成的 SQL 语句类似于:

SELECT * FROM users WHERE username = ?

并且 username 的值会通过 PreparedStatement 设置。
使用 ${}:

SELECT * FROM users WHERE username = ${username}

如果 username 的值是 "admin' OR '1'='1",那么最终的 SQL 语句将是:

SELECT * FROM users WHERE username = admin' OR '1'='1

这将导致 SQL 注入。
总结:
在大多数情况下,应该优先使用 #{} 来防止 SQL 注入,并且只有在确信参数值不会引起安全问题时才使用 ${}。


http://www.ppmy.cn/news/1531353.html

相关文章

STL05——手写一个简单版本的红黑树(500+行代码)

STL05——手写一个简单版本的红黑树 题目描述 在STL中,红黑树是一个重要的底层数据结构,本题需要设计一个 RedBlackTree 类,实现如下功能: 1、基础功能 构造函数:初始化 RedBlackTree 实例析构函数:清理…

Packet Tracer - IPv4 ACL 的实施挑战(完美解析)

目标 在路由器上配置命名的标准ACL。 在路由器上配置命名的扩展ACL。 在路由器上配置扩展ACL来满足特定的 通信需求。 配置ACL来控制对网络设备终端线路的 访问。 在适当的路由器接口上,在适当的方向上 配置ACL。…

JMeter源码解析之JMeter命令行新增命令

JMeter源码解析之JMeter命令行新增命令 需求描述 需要新增一条命令,能够在JMeter命令行中能够展示输入对应的JMeter命令,能够展示对应的命令信息 查看命令效果如下: apache-jmeter-5.1\bin>jmeter --? Copyright © 1999-2024 The …

Efficient DETR: Improving End-to-End Object Detector with Dense Prior

原文链接 [2104.01318] Efficient DETR: Improving End-to-End Object Detector with Dense Prior (arxiv.org)https://arxiv.org/abs/2104.01318 原文笔记 What 1、一种针对DETR的objectquery初始化的方法 2、针对Deformable DETR进行改进,改进之后的模型具有…

计算机网络发展

目录 一、计算机网络的起源 1.1 ARPANET的诞生 1.2 TCP/IP协议的提出 二、互联网的兴起与普及 2.1 DNS系统的建立 2.2 万维网的诞生 2.3 互联网的商业化 三、宽带和无线网络的发展 3.1 宽带网络的普及 3.2 无线网络与移动互联网 四、互联网的未来趋势 4.1 5G与物联网…

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-20 1. Multimodal Fusion with LLMs for Engagement Prediction in Natural Conversation Authors: Cheng Charles Ma, Kevin Hyekang Joo, Alexandria K. Vail, Sunreeta Bhattacharya, Alvaro Fern’andez Ga…

华为HarmonyOS地图服务 7- 在地图上绘制标记

场景介绍 本章节将向您介绍如何在地图的指定位置添加标记以标识位置、商家、建筑等。 点标记用来在地图上标记任何位置,例如用户位置、车辆位置、店铺位置等一切带有位置属性的事物。Map Kit提供的点标记功能(又称 Marker)封装了大量的触发…

图为科技大模型一体机,智领未来社区服务

当AI与边缘计算相遇,一幅关于智慧生活的宏伟蓝图正缓缓展开。 今天,让我们一同探索,如何通过图为大模型一体机,为物业服务插上智能的翅膀。 通过整合采集物业数据,大模型一体机可全方位为物业行业赋能,实…