面试题:mybatis中# 和 $ 的区别

news2024/11/17 19:44:46

面试题:mybatis中# 和 $ 的区别

一、主要区别如下:

1、#{}可以理解为预处理,而${}是直接替换。

#传入的参数在SQL中显示为字符串,会对自动传入的数据加上双引号。
$传入的参数在SQL中直接显示为传入的值

2、#{}试用于所有类型的参数匹配,但${}只试用于数值类型

这个很好理解因为使用#{}传入的参数会以字符串的形式进行匹配,而${}传入的参数则是直接替换,数值类型你像Id这种直接替换还好,如果是字符Name这种传入一个名字直接替换的话就会出错。

3、#{}性能更高,并且没有SQL注入的安全性问题,但${}存在SQL注入的安全问题

4、大多数情况下还是经常使用#{},一般能用#的就别用$ ,但是有些情况下必须使用$ ,例如:MyBatis排序时,使用order by动态参数时候需要注意,用$ 而不是#。

二、详细分析一下子(看好了!!!)

1.1 如下的SQL语句,使用#{}传入name字段,根据name查询

    <select id="getUserByName" resultMap="UserMap">
        select * from mybatis.user where name = #{Name}
    </select>

上述的SQL语句解析后内容如下:
在这里插入图片描述
好,,我们可以从下图中看到使用#{}传入的name参数,其在解析后生成的SQL语句是预处理、预先占领然后传入了String类型的这样一个参数的效果。

1.2 于此相对,上述的SQL语句,我们使用${} 传入name字段

    <select id="getUserByName" resultMap="UserMap">
        select * from mybatis.user where name = ${Name}
    </select>

上述的SQL语句解析后内容如下:
在这里插入图片描述
在这里插入图片描述

我们可以很清楚的看到,使用 $ 这种方式是将我们的传入的参数直接替换到对应的SQL语句中,这样不仅会导致SQL注入的问题,而且很明显是怎么样,,错误的(因为使用$ {} 它没有对你传入的参数进行预处理,只是单纯的替换,那肯定不行,应该处理为String类型的数据,这也说明了为什么#{}试用于各种传入的数据类型的参数)。
因此,使用$ 只有当传入的数据类型为整数或是特定的场景下时(比如MyBatis排序时,使用order by动态参数时候需要注意,用$ 而不是#)才是合适的。

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

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

相关文章

不要再封装各种Util工具类了,这个神级框架你值得拥有!

一、功能 二、安装 三、简单测试 今天给大家推荐一个非常好用的Java工具类库&#xff0c;企业级常用工具类&#xff0c;基本都有&#xff0c;能避免重复造轮子及节省大量的开发时间&#xff0c;非常不错&#xff0c;值得大家去了解使用。 Hutool 谐音 “糊涂”&#xff0c;…

STM32F4的连接初始化【ST-LINK、USB To TTL】

所需设备&#xff1a;STM32F4、杜邦线&#xff08;彩色小电线&#xff09; * 8 、USB 转 TTL 0.认识设备 ST-link USB 转TTL STM32F4主板 1.连线 ST-Link连线 一共需要四根线 序号从左至右&#xff0c;从上至下进行编号 1 - 3.3V 连接 1&#xff08;黄色&#xff09;2- GND …

并发编程.

1、概述 1.1 进程和线程 进程&#xff1a;操作系统资源分配的最小单位。 程序由指令和数据组成&#xff0c;指令要执行&#xff0c;数据要读写&#xff0c;就必须将指令加载至cpu&#xff0c;数据加载至内存&#xff0c;在指令运行过程中还需要用到磁盘、网络等设备&#xff0…

python:并发编程(十八)

前言 本文将和大家一起探讨python并发编程的实际运用&#xff0c;会以一些我实际使用的案例&#xff0c;或者一些典型案例来分享。本文使用的案例是我实际使用的案例&#xff08;下篇&#xff09;&#xff0c;是基于之前效率不高的代码改写成并发编程的。让我们来看看改造的过…

计算逆波兰表达式

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;数据结构。数据结构专栏主要是在讲解原理的基础上拿Java实现 ⭐码云地址超链接(Gitee)&#xff1a;这里存放我学…

如何搭建Nginx网站服务

目录 一、首先搭建Nginx服务 二、授权的访问控制 第一步 安装依赖包 第二步 生成用户密码认证文件 第三步 修改文件属性和权限 第四步 修改配置文件 第五步 用浏览器测试网站 三、基于IP地址进行限制 第一步 修改配置文件 第二步 用两台设备进行访问测试 四、基于域…

工人规范操作识别系统 yolov5

工人规范操作识别系统通过yolov5python网络模型技术&#xff0c;工人规范操作识别系统对工人的操作进行实时监测&#xff0c;当工人规范操作识别系统检测到工人操作不符合规范时&#xff0c;将自动发出警报提示相关人员采取措施。YOLOv5中在训练模型阶段仍然使用了Mosaic数据增…

HCI-1

3.1 定义 就本文档而言&#xff0c;适用以下术语和定义&#xff1a; 嵌入式安全元件主机&#xff1a;在不可移动安全元件中实现的主机 门&#xff1a;主机内部运行的服务的入口点 主机&#xff1a;运行一项或多项服务的逻辑实体 主机控制器&#xff1a;还负责管理主机网络的…

聊聊 分布式系统 中的补偿机制设计问题

一、关于业务补偿机制 1、什么是业务补偿 2、业务补偿设计的实现方式 二、关于回滚 1、显示回滚 2、回滚的实现方式 三、关于重试 1、重试的使用场景 2、重试策略 3、重试时的注意事项 四、业务补偿机制的注意事项 1、ACID 还是 BASE 2、业务补偿设计的注意事项 我们知…

Langchain+本地大语言模型进行数据库操作的实战代码

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Navicat Premium 16执行.sql语句中含有汉字乱码造成view和function创建后无法使用

Navicat Premium 16执行.sql语句中含有汉字乱码造成view和function创建后无法使用 如图&#xff0c;从这里选择sql时没法改sql。所以造成我昨天创建view和function时创建好的前面有感叹号没法用。打开一个fun看里面的汉字是问号。 所以要从这里打开&#xff1a; 1. ultraedit…

EMC学习笔记(十)特殊信号的EMC处理(二)

特殊信号的EMC处理&#xff08;二&#xff09; 1.对外接口的EMC设计标准电路1.1 DVI EMC设计标准电路1.2 HDMI接口EMC设计标准电路1.3 LVDS接口EMC设计标准电路1.4 PS2接口EMC设计标准电路1.5 RJ11 EMC设计标准电路1.6 SCART接口EMC设计标准电路1.7 s-video接口EMC设计标准电路…

五个步骤,助你优雅的写好 Controller 层代码!

Controller 层逻辑 普通写法 优化思路 Controller 层逻辑 MVC架构下&#xff0c;我们的web工程结构会分为三层&#xff0c;自下而上是dao层&#xff0c;service层和controller层。controller层为控制层&#xff0c;主要处理外部请求&#xff0c;调用service层。 一般情况下…

6.23黄金是否会跌破1900?多单被套怎么办?

近期有哪些消息面影响黄金走势&#xff1f;今日黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周四&#xff08;6月22日&#xff09;美市尾盘&#xff0c;现货黄金收报1910美元/盎司&#xff0c;下跌20美元或0.1%&#xff0c;日内最高触及1934.95美元/盎司&…

C++ 面向对象(1)——类 对象

C 在 C 语言的基础上增加了面向对象编程&#xff0c;C 支持面向对象程序设计。类是 C 的核心特性&#xff0c;通常被称为用户定义的类型。 类用于指定对象的形式&#xff0c;是一种用户自定义的数据类型&#xff0c;它是一种封装了数据和函数的组合。类中的数据称为成员变量&a…

Studio One6中文版多少钱?有哪些新功能

Studio One6中文版现在有三个版本&#xff0c;免费版&#xff0c;Artist&#xff0c;Pro版本。下载后是免费版&#xff0c;免费版没有时间限制&#xff0c;但是功能受限。三个版本都支持win/mac系统&#xff0c;而且同时支持5台设备使用&#xff0c;还可以换机使用。 三个版本…

Spring Cloud Day2 Nacos配置管理、Feign远程调用与Gateway服务网关

SpringCloud实用篇02 0.学习目标 1.Nacos配置管理 Nacos除了可以做注册中心&#xff0c;同样可以做配置管理来使用。 1.1.统一配置管理 当微服务部署的实例越来越多&#xff0c;达到数十、数百时&#xff0c;逐个修改微服务配置就会让人抓狂&#xff0c;而且很容易出错。我…

关闭 MAC 的 Microsoft AutoUpdate 自动更新

不是我说&#xff0c;这玩意儿看着是真不爽&#xff01;&#xff01;而且每天都要弹出来搞事情&#xff01;&#xff01;&#xff01; 我宣布&#xff1a;今天就要永久关闭 MAC 的 Microsoft AutoUpdate 自动更新&#xff01;&#xff01; 像我一样的朋友请举手&#xff01;&am…

Linux学习[17]bash学习深入3---万用字符特殊符号---数据流重导向

文章目录 前言1. 万用字符2. 特殊字符3. 数据流重导向3.1标准输出3.2 标准输入 总结 前言 这篇博客是对之前在查找的时候涉及到的一些通配符(bash里面就是万用字符)的整理。这个为后面管线相关打一个基础。 1. 万用字符 这里整理了一个表格&#xff0c;后面配上相关实例。 符…

定制化你的应用外观:gradio的自定义主题功能

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…