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

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

在 MyBatis 中,#{} ${} 是两种不同的参数注入方式,主要区别在于参数的预处理和安全性。

#{} :预处理参数

  • #{} 用于预处理参数,会将参数值以预编译的形式传递给 SQL 引擎,防止 SQL 注入攻击。
<!-- 示例:使用#{}预处理参数 -->
<select id="getUserById" resultType="User">SELECT * FROM user WHERE id = #{userId}
</select>

在上面的例子中,#{userId} 会被 MyBatis 替换成 ?,然后在执行 SQL 语句时,将真正的参数值传递给 ? 进行预编译,这有助于防止 SQL 注入。

${}:直接拼接参数

  • ${} 用于直接拼接参数,将参数值直接替换到 SQL 语句中,不进行预处理。这样做可能会存在 SQL 注入的风险,因此要慎用。
<!-- 示例:使用${}直接拼接参数 -->
<select id="getUserByName" resultType="User">SELECT * FROM user WHERE name = '${userName}'
</select>

在上面的例子中,${userName} 会直接替换成实际的参数值,如果参数值包含恶意的 SQL 语句,可能导致 SQL 注入攻击。

区别总结:

  • #{} 用于预处理参数,安全性更高,可以防止 SQL 注入。
  • ${} 用于直接拼接参数,慎用,可能存在 SQL 注入的风险。

示例代码:

public interface UserMapper {// 使用#{}预处理参数@Select("SELECT * FROM user WHERE id = #{userId}")User getUserById(@Param("userId") int userId);// 使用${}直接拼接参数@Select("SELECT * FROM user WHERE name = '${userName}'")User getUserByName(@Param("userName") String userName);
}

上述示例代码展示了在 MyBatis 中使用 #{} ${} 的方式。通常建议使用 #{} 以提高安全性,防止 SQL 注入攻击。

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

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

相关文章

转动惯量与惯性张量 的推导

从牛顿第二定律推出绕固定轴旋转的转动惯量&#xff0c;再用类似方法从牛顿第二定律推出绕固定点转动的惯性张量 基础定义 角速度 ω \omega ω是一个三维向量&#xff0c;方向表示旋转轴&#xff0c;用右手定则代表旋转方向&#xff0c;长度代表旋转弧度的速度 线速度&#…

WebGL+Three.js入门与实战——给画布换颜色、绘制一个点、三维坐标系

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

为了吃鸡苦练狙击,避免坑队友自己造一个狙击游戏!

引言 一文教会你造一个简易的狙击游戏。 说到狙击&#xff0c;相信大家都不陌生&#xff0c;无论是影视作品还是网络游戏&#xff0c;都经常能看到狙击枪的身影&#xff0c;最深刻的是它能够从百里之外&#xff0c;一枪爆头。 本文将介绍如何在Cocos Creator中造一个简易的狙…

UE5 动画 Sequencer-学习笔记

P2. 课程介绍 资料&#xff1a;https://www.bilibili.com/video/BV1Ag411873f?p2&vd_source707ec8983cc32e6e065d5496a7f79ee6 Sequencer不仅可以做互动动画&#xff0c;还可以导出视频与序列帧 P3-4. 界面介绍 https://www.bilibili.com/video/BV1Ag411873f?p3&spm_…

android实战之感知型组件的最佳实践

引言 使界面控制器&#xff08;activity 和 fragment&#xff09;尽可能保持精简。它们不应试图获取自己的数据&#xff0c;而应使用 ViewModel 执行此操作&#xff0c;同时应观测 LiveData 对象以在视图中体现相应变化。设法编写数据驱动型界面&#xff0c;在此类界面中&…

Spring Boot 框架能够解决什么问题?

Spring Boot 是基于 Spring 框架的一个子项目&#xff0c;它旨在简化 Java 开发中的配置和部署过程&#xff0c;提供一种快速、敏捷的开发方式。Spring Boot 的设计理念是约定优于配置&#xff0c;通过默认配置和自动化&#xff0c;使得开发者能够更专注于业务逻辑的实现&#…

数据挖掘任务一般流程

数据挖掘是从大量数据中提取有价值信息的过程。它涉及多个步骤&#xff0c;每一步都对整个数据挖掘过程至关重要。以下是数据挖掘任务的一般流程&#xff1a; 业务理解&#xff1a; 确定业务目标。评估当前情况。定义数据挖掘问题。制定一个初步计划来达到这些目标。 数据理…

WPF-附加属性《十二》

非常重要 依赖属性和附加属性&#xff0c;两者是有关系的&#xff0c;也是有些区别的&#xff0c;很多时候&#xff0c;可能会把两者混淆了。 附加属性&#xff08;Attach Property&#xff09; 顾名思义&#xff0c;就是附加上面的属性&#xff0c;自身是没有的&#xff0c;…

android studio 编译老项目失败问题处理

Unsupported Java. Your build is currently configured to use Java 17.0.6 and Gradle 6.7.1. Possible solution: - Upgrade Gradle wrapper to 7.2 version and re-import the project 假如的错误是上面的内容&#xff0c;请检查一下你的JDK版本是不是太高了&#xff0…

人工智能在红斑狼疮应用主要以下4个方面

人工智能&#xff08;Artificial Intelligence, AI&#xff09;在医学领域的应用已取得了一定的进展。红斑狼疮&#xff08;Systemic Lupus Erythematosus, SLE&#xff09;是一种免疫系统性疾病&#xff0c;对该疾病进行诊断和治疗是一个复杂的过程。人工智能可以发挥作用&…

如何在Centos 7环境下安装MySQL并登录

目录 先获取MySQL官方yum源 然后正常使用yum命令下载mysql即可完成MySQL的下载 使用mysql客户端登录mysqld服务端 能够登录mysql客户端后&#xff0c;我们最后还需要做一点配置 先获取MySQL官方yum源&#xff08;包括对yum源的介绍&#xff09; 介绍一下yum源 yum源就是一…

瞳孔检测眼动追踪python实现(基于dlib)

效果展示&#xff1a; 原图&#xff1a;&#xff08;图片来自 b站up 借我300去洗牙&#xff09; dlib实现的特征点检测 瞳孔检测结果 完整代码&#xff1a; # encoding:utf-8import dlib import numpy as np import cv2def rect_to_bb(rect): # 获得人脸矩形的坐标信息x …

服务器感染了.locked、.locked1勒索病毒,如何确保数据文件完整恢复?

尊敬的读者&#xff1a; .locked、.locked1勒索病毒是当前网络安全威胁中备受关注的一种恶意软件。本文将深入介绍.locked、.locked1勒索病毒的特征&#xff0c;有效的数据恢复方法&#xff0c;以及一系列预防措施&#xff0c;以帮助用户更好地保护自己的数字资产。面对复杂的…

深入理解人工智能中的图神经网络:原理、应用与未来展望

导言&#xff1a; 图神经网络&#xff08;Graph Neural Networks, GNNs&#xff09;作为人工智能领域的一项前沿技术&#xff0c;在社交网络分析、推荐系统、生物信息学等多个领域展现出卓越的性能。本文将深入剖析图神经网络的原理、当前应用场景以及未来可能的发展方向。 1.…

swing快速入门(十二)

注释很详细&#xff0c;直接上代码 上一篇 新增内容 1.Box容器和BroadLayout布局管理器的结合用法 2.textArea&#xff08;多行文本域&#xff09; 3.Choice&#xff08;下拉选择栏&#xff09; 4. CheckboxGroup&#xff08;多项单选选择框&#xff09; 5. Checkbox&…

循环神经网络-1

目录 1 数据集构建 1.1 数据集的构建函数 1.2 加载数据并进行数据划分 1.3 构造Dataset类 2 模型构建 2.1 嵌入层 2.2 SRN层 2.3 线性层 2.4 模型汇总 3 模型训练 3.1 训练指定长度的数字预测模型 3.2 多组训练 3.3 损失曲线展示 4 模型评价 总结 参考文献 循环神经网络&…

从零开始:前端架构师的基础建设和架构设计之路

文章目录 一、引言二、前端架构师的职责三、基础建设四、架构设计思想五、总结《前端架构师&#xff1a;基础建设与架构设计思想》编辑推荐内容简介作者简介目录获取方式 一、引言 在现代软件开发中&#xff0c;前端开发已经成为了一个不可或缺的部分。随着互联网的普及和移动…

postman中Test断言介绍

Test断言 一&#xff0c;常用断言&#xff1a;1&#xff09;Status code:Code is 200 检查返回的状态码是否为2002&#xff09;Response body:Contains string 检查响应中包括指定字符串3&#xff09;Response body:Json value check 检查响应中其中json的值4&#xff09;Respo…

简洁高效的 NLP 入门指南: 200 行实现 Bert 文本分类 (TensorFlow 版)

简洁高效的 NLP 入门指南: 200 行实现 Bert 文本分类 TensorFlow 版 概述NLP 的不同任务Bert 概述MLM 任务 (Masked Language Modeling)TokenizeMLM 的工作原理为什么使用 MLM NSP 任务 (Next Sentence Prediction)NSP 任务的工作原理NSP 任务栗子NSP 任务的调整和局限性 安装和…

【UE5.2】从零开始控制角色移动、游泳、下潜、上浮

目录 效果 步骤 一、项目准备 二、控制角色移动 三、控制角色游泳 四、实现角色潜水、上浮 五、解决在水面上浮的Bug 效果 步骤 一、项目准备 1. 新建一个空白工程&#xff0c;创建一个Basic关卡&#xff0c;添加第三人称游戏资源到内容浏览器 2. 在插件中启用“W…