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

MyBatis中的#和$有什么区别 MyBatis是一款优秀的持久层框架,特别是在国内(国外据说还是 Hibernate 的天下)非常的流行,我们常说的SSM组合中的M指的就是MyBatis。MyBatis支持定制化SQL、存储过程以及高级映射等多种特性,单纯从代码上来看,MyBatis避免了几乎所有的JDBC代码和手动设置参数以及手动处理结果集。而且MyBatis的使用也非常方便,可以通过简单的XML或注解来配置和映射数据信息。对MyBatis不熟悉的小伙伴,可以私信百泽老师,我们有免费的MyBatis手把手教学视频送给你哦~ 阅读详情

//${} 是字符串直接替换;${} 存在SQL注入的问题;

//#{} 是预编译处理;而 #{} 不存在SQL注入问题;

一,预编译处理与字符串直接替换

预编译处理:

        预编辑处理:是指 MyBatis 在处理 #{} 时,就是把 #{} 替换成了 ?号,使用 PreparedStatement 的 set 方法来赋值。也就是说 #{} 会把 {} 内的整体看成 value ,最后再给 value 加上单引号,重点强调引号内部是一个整体( #{} 不会发生 SQL 注入的根本原因)。

字符串直接替换

        是指 MyBatis 在处理 ${} 时,会把 ${} 替换成变量的值(不会加引号处理)。

模糊匹配:

        ${} 可以直接进行模糊查询(但不建议,存在 SQL 注入问题);

        #{} 不可以直接进行模糊查询,但可以通过 mysql 内置函数 concat() 实现模糊查询(不存在 SQL 注入问题);

解释:

当你想输入以下代码时

select * from user where username = '%abc%';

使用#{}会进行预编译,自动加引号处理,于是就变成了

select * from user where username = '%' abc '%';

而用${}时,是直接替换,使用以下代码即可

select * from userinfo where username like '%${key}%'

使用#{}时可以使用concat()方法连接

 select * from userinfo where username like concat('%', '${key}', '%')

排序查询

使用 ${} 可以实现排序查询,而 #{} 不可以实现排序查询,因为使用 #{} 查询时,如果传递的值为 String 就会加单引号,导致 sql 错误。

如果你想输入以下代码:

select * from userinfo order by id desc;

使用#{}会有以下效果:

select * from userinfo order by id ‘desc’

结论:除了模糊匹配,杜绝使用${}

大数据 DataX-Web 详细安装教程 阅读详情

相关推荐

Unity调用手机摄像头避坑指南:从权限检测到自动对焦问题解决

本文深入解析了Unity移动端集成手机摄像头时遇到的权限、对焦与性能等核心难题。针对权限管理,提供了健壮的原生接口调用方案;针对自动对焦模糊问题,详细对比了原生插件与第三方插件两种解决路径;并分享了分辨率选择、数据处理及功耗控制等关键性能优化技巧,帮助开发者构建稳定高效的摄像头功能。

weixin_29007243的博客 470

Mybatis中#和$的区别

Mybatis中#和$的区别

伏颜的博客 2万+

QGIS三维地形可视化实战:从DEM数据到炫酷3D场景(附Qgis2threejs插件配置)

本文详细介绍了如何利用QGIS和Qgis2threejs插件,将DEM数据转化为交互式三维地形场景的完整工作流。核心内容包括DEM数据准备、坐标系选择(重点对比WGS 84与UTM的差异及影响)、插件核心参数配置、卫星影像与等高线叠加等进阶技巧,并提供了成果导出与常见问题解决方案,帮助用户高效创建可用于网页展示的炫酷3D可视化成果。

mqtt6iot的博客 875

Mybatis #和$区别以及原理

总结: #可以防止Sql 注入,它会将所有传入的参数作为一个字符串来处理。 $ 则将传入的参数拼接到Sql上去执行,一般用于表名和字段名参数,$ 所对应的参数应该由服务器端提供,前端可以用参数进行选择,避免 Sql 注入的风险 为什么? 为什么 # 和 $ 的作用不同,Mybatis 对他们做了哪些惨无人道的处理,我们看一下下面的例子,并追踪一下源码总结。 示例代码: 创建一个 tb...

张井天的博客 4万+

GEO数据库数据下载方法总结

#GEO数据下载 GEO是生信分析经常用到的数据库。经常需要从中获取表达矩阵,平台信息,meta信息等,本博文总结了几种下载GEO数据的方法,各有优劣,实际应用过程中自行选择适合自己的。 ##方法一:直接从浏览器中下载 以数据集GSE1001为例, 可以直接点击“Series Matrix Files”获取该样本txt格式的表达谱数据,一般我们认为这种处理过的表达谱数据是没有问题的,当然,具体情况具体分析。 打开下载的文件可以看到许多“#”开头的行,这些是注释信息,一般关注这些注释信息中的“data pr

sakoko_的博客 4万+

数字逻辑设计大程——以撒的结合(Verilog语言)

前言 在大二学习数字逻辑设计课程(即计算机组成课程的前引课)时,期末大程题目我和同组的github成员lwaekfjlk 决定写一款基于Verilog语言的游戏。原型是我们两人都非常喜爱的一款游戏——The Binding of Isaac: Rebirth。在三天三夜的奋战后,基本完成了预期目标。由于亲自编写了其中种种,我们深知新手初期使用Verilog语言有多困难。而可悲的是,这又是之后计算机组成课程和体系结构课程所需的!因此,我们将top部分源码放在这里,供同袍们参考。若想引用还请注明出处。 代码部分

LuvLucifer的博客 1383

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

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

啊松同学的博客 1342

SAP-ABAP:字符与数值类型转换详细指南

SAP-ABAP:字符与数值类型转换详细指南

baidu_35680696的博客 1474

mybatis中#和$的区别

mybatis中#和$的区别是什么 在mybatis中#和KaTeX parse error: Expected 'EOF', got '#' at position 8: 的主要区别是:#̲传入的参数在SQL中显示为字符…传入的参数在SqL中直接显示为传入的值,$方式无法防止Sql注入。 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映

aaaaAyy12的博客 1万+

Python爬虫教程:抓取电商网站评论(以淘宝和京东为例)

通过本文的介绍,我们学会了如何使用Python编写爬虫,抓取淘宝和京东等电商平台的商品评论数据。我们介绍了如何使用电商平台提供的开放API以及如何通过模拟浏览器来抓取动态加载的数据。此外,我们还讨论了如何应对反爬虫技术,如何存储抓取的数据等。爬取电商平台的数据是一个强大的工具,能够为市场分析、消费者行为研究、产品优化等领域提供有力的支持。然而,在使用爬虫技术时,我们必须遵循法律法规,尊重平台的隐私政策,避免滥用数据。

2201_76125261的博客 1737

Muse Spark:功能、性能测试及使用方法

对于一个仅用九个月时间从零开始重建的团队来说,这样的健康状况和多模态测试结果无疑是迈出了坚实的第一步,并且经受住了独立测试的考验。Muse Spark 为每个产品确定了最重要的主题(A 产品的发布策略、B 产品的定价策略、C 产品的规模化策略),并提出了切实可行的具体行动方案。抽象视觉推理也遵循同样的模式:Muse Spark 的 ARC-AGI-2 得分为 42.5,而 GPT-5.4 和 Gemini 的得分都在 70 分左右。他的离职是由于组织结构的变化限制了他的角色,以及团队转向闭源开发。

xiaoshun007的专栏 123

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

可以看出 ${} 和 #{} 都是 MyBatis 中用来替换参数的,它们二者的区别主要体现在:${} 是直接替换,而 #{} 是预处理;需要传递普通参数时使用 #{};如果业务需要传递的是 SQL 命令或 SQL 关键字,需要使用${} ,但在使用前一定要做好安全验证;使用 ${} 存在安全问题,而 #{} 则不存在安全问题。

hhua0123的专栏 627

从泛光成像到可寻址扫描:Flash激光雷达的车规级优势与技术演进

Flash激光雷达凭借固态架构优势成为自动驾驶感知技术的重要发展方向。该方案无机械部件,具备抗振动、长寿命等特点,同时CMOS工艺带来显著成本优势。但传统泛光式存在能量弥散问题,难以兼顾大视场和远距离探测。可寻址扫描技术通过分区点亮VCSEL阵列,有效提升局部能量密度,在保持固态可靠性的同时突破性能瓶颈。这种"电子扫描+分区点亮"的混合架构,使Flash激光雷达有望实现大视场、远距离、高可靠和低成本的多重突破,推动自动驾驶技术发展。

致力于lidar应用开发 233

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

{} 是预编译处理,${} 是直接替换;${} 存在SQL注入的问题,而 #{} 不存在;

x18302457177的博客 1125

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

MyBatis 是一个优秀的持久层框架,它简化了数据库操作,并提供了强大的 SQL 映射功能。在 MyBatis 中,#{}和${}是两种常用的占位符,用于动态替换 SQL 语句中的参数。尽管它们看起来相似,但它们在处理方式和安全性上有显著的区别。本文将详细探讨#{}和${}的区别,并分析它们的适用场景。

秃头之旅 2479

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

本章节主要讲解mybatis中#{}和${}的区别 首先我们先通过代码事例查看下二者的区别: 在EmployeeMapper接口中有这么一个方法: Employee getEmpByIdAndLastName(@Param("id")Integer id, @Param("lastName") String lastName); 在对应的EmployeeMapper.xml 映射文...

qq_37776015的博客 5348

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Mybatis中的#和$的区别

在学校的时候,想必大家肯定听老师讲过,在mybatis中,配置参数要用#,不要用$符号。因为$不安全,容易被sql注入。讲是这么讲,但是如何注入的,大家一起来看看吧。 一:下面我们写个关于“#”的个sql,看能不能注入。 <select id="selectUser" resultMap="BaseResultMap"> SELECT ...

qq_27811247的博客 4万+

【MyBatis】MyBatis中#{}与${}的区别是什么?

在开发中使用Mybatis经常使用到#{}与${},二者区别是?来总结一下。在mybatis中动态 sql 是其主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在执行操作之前 mybatis 会对其进行动态解析。mybatis 提供了两种支持动态 sql 的语法:#{} 以及 $ {},其最大的区别则是#{}方式能够很大程度防止sql注入(安全),${}方式无法防止Sql注入。

DreamSun的博客 2514

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

mybatis编写SQL语句的时候,经常需要用到,那么用来替换变量值的操作这两个符号,同样在一些Java面试中也经常被问到它们的区别。那么它们在使用上面有什么区别呢?

weixin_52222660的博客 1454

请简述MyBatis中 #{} 和 ${} 之间的区别。

​ 首先和都可以用来读取调用Mapper接口时传递给方法的形参值,形参可以是基本类型、引用类型(对象),不管是读取基本类型还是对象中的属性,都可以用或直接获取到。

Jiali的博客 2331

mybatis # 和$的区别

1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的时候,就相当于select id,name,age from student where id ='1'. 2 $是将传入的数据直接显示生成sql语句,eg:select id,name,age from student wh...

qq_35773649的博客 1265

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

在MyBatis中,#{}和${}是两种参数替换方式,核心区别在于和。

2303_78263863的博客 1004

MyBatis的#和$的区别

MyBatis的#和$的区别 #相当于对数据加上双引号,$相当于直接显示数据 1、#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。 如order by #user_id#,如果传入的值是11,那么解析成sql时的值为order by "11",如果传入的值是id,则解析成的sql为order by "id". 2、$将传入的值直接显示生成在sql中, 如order by #user_id#,如果传入的值是11,那么解析成sql时的值为order by user_id,

阿颜的博客 192

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

${}和#{}的作用 Mybatis在项目中起到的是项目和数据库的交互以及sql语句的管理,sql语句的集中管理,方便开发人员对sql语句的复用和管理,但是既然需要复用,就表明sql语句本身是进过抽象的,抽象的目标就是参数,在不同的用途就需要传入不同的参数${}和#{}就是用来向已经定义好的sql语句传入参数的。 ${}和#{}的区别 #{} 这种取值是变异号sql语句之后再取...

founder_forever的博客 938

Mybatis中的#号与$符号的区别

1、#{变量名}可以进行预编译、类型匹配等操作, 2、#{变量名}会转化为jdbc的类型。 3、${变量名}不进行数据类型匹配,直接替换。 4、#方式能够很大程度防止sql注入。 5、$方式无法方式sql注入。 6、$方式一般用于传入数据库对象,例如传入表名。 7、尽量多用#方式,少用$方式。 8、#会自动加双引号,$不会加双引号 这两个符号在mybatis中最直接的区别就是:#相当于对数据 加上 单引号,$相当于直接显示数据(只讨论字符串类型的)。 1、#对传入的参数视为字符串,也就..

小泽 1万+

Mybatis 中$与#的区别

一 : mybatis中 $与# 1.数据类型匹配 #:会进行预编译,而且进行类型匹配 $:不进行数据类型匹配 2.实现方式 #:用于变量替换 $:实质上是字符串拼接 3.#和$的使用场景 (1)变量的传递,必须使用#,使用#{}就等于使用了PrepareStatement这种占位符的形式,提高效率。可以防止sql注入等等问题。#方式一般用于传入添加,修改的值或查询,删除的where条件...

MengW9的博客 1162
上一篇: MyBatis的工作流程和执行原理
下一篇: MyBatis的CRUD中的不同参数绑定查询
涵冰...
博客等级 码龄4年 2438粉丝 243原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涵冰...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值