MyBatis配置中的#「」和$「」有什么区别?

本文涉及的产品
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: Mybatis提供到的#号和$号,都是实现动态SQL的一种方式,通过这两种方式把参数传递到XML之后,在执行操作之前,Mybatis会对这两种占位符进行动态解析。

最新一期面试文档扫码左侧二维码免费拿!

前几天,一位应届生去面试,被问到一个MyBatis中比较基础的问题,说MyBatis中的#号和$符号有什么区别?今天,我给大家来详细介绍一下。

另外,我花了1个多星期,准备了一份10W字的面试题解析配套文档,想获取的小伙伴可以扫码文章底部二维码免费拿!

1、两者区别

Mybatis提供到的#号和$号,都是实现动态SQL的一种方式,通过这两种方式把参数传递到XML之后,在执行操作之前,Mybatis会对这两种占位符进行动态解析。

f476c58392dee4a33825fe632a5fffc4.jpg

下面我给家详细介绍一下#号和$号的区别,

首先,来看#号,等同于JDBC里面的?号(占位符)。

134d9ccf7f2ff08607f3f51a52697852.jpg

它相当于向PreparedStatement预处理语句中设置参数,而PreparedStatement中的SQL语句是预编译的,如果在设置的参数包含特殊字符,会自动进行转义。所以#号占位符可以防止SQL注入。

ec472d760f065b5e99b59d4954a4e891.jpg

比如:这样一段代码:

解析前:

select * from user order by #{age} desc;

解析后:

select * from user order by ? desc;

a6650e6f2dbd444fca230ac56d023955.jpg

而使用$号,相当于直接把参数拼接到了原始的SQL里面,MyBatis不会对它进行特殊处理。

2da45b6a792a753da04817a80c48132a.jpg

解析前:

select * from user order by ${age} desc;

解析后:

select * from user order by age desc;

57b5c1e3db8ac1ed17b9e9e95ecfea7d.jpg

所以$和#最大的区别在于,前者是动态参数,后者是占位符, 动态参数无法防止SQL注入的问题,所以在实际应用中,应该尽可能的使用#号占位符。

另外,$符号的动态传参,可以适合应用在一些动态SQL场景中,比如动态传递表名、动态设置排序字段等。

2、总结

一些小的细节如果不注意,就有可能造成巨大的经济损失。在技术如此成熟的互联网时代,还是会有一些网站经常出现SQL注入导致信息泄露的问题。

以上就是我对MyBatis配置#号和$号的理解。我是被编程耽误的文艺Tom,关注我,面试不再难!

最后,我把之前分享的视频全部整理成了文字,想获取的小伙伴可以扫描文章底部二维码拿!希望能够以此来提高各位粉丝的通过率。

ee90d9963df444db88b33d6e798a5b94.gif

我是被编程耽误的文艺Tom,只弹干货不掺水!你们的支持就是我最大的动力!关注我,面试不再难!

相关文章
|
20天前
|
SQL 人工智能 Java
mybatis-plus配置sql拦截器实现完整sql打印
_shigen_ 博主分享了如何在MyBatis-Plus中打印完整SQL,包括更新和查询操作。默认日志打印的SQL用?代替参数,但通过自定义`SqlInterceptor`可以显示详细信息。代码示例展示了拦截器如何替换?以显示实际参数,并计算执行时间。配置中添加拦截器以启用此功能。文章提到了分页查询时的限制,以及对AI在编程辅助方面的思考。
53 5
mybatis-plus配置sql拦截器实现完整sql打印
|
3天前
|
Java 数据库连接 mybatis
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
SpringBoot配置Mybatis注意事项,mappers层下的name命名空间,要落实到Dao的video类,resultType要落到bean,配置好mybatis的对应依赖。
|
11天前
|
XML 前端开发 Java
Mybatis-Plus乐观锁配置
Mybatis-Plus乐观锁配置
15 1
|
16天前
|
Java Spring
mybatisplus的typeAliasesPackage 配置
【6月更文挑战第20天】mybatisplus的typeAliasesPackage 配置
18 3
|
16天前
|
SQL XML Java
蓝易云 - ibatis与mybatis的区别
总的来说,MyBatis在功能性和易用性上都优于iBatis,是iBatis的改进版。
7 2
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
若依修改,集成mybatisplus报错,若依集成mybatisplus,总是找不到映射是怎么回事只要是用mp的方法就找报,改成mybatisPlus配置一定要改
接口模板,文本常用的接口Controller层,常用的controller层模板,Mybatisplus的相关配置
接口模板,文本常用的接口Controller层,常用的controller层模板,Mybatisplus的相关配置
|
12天前
|
SQL Java 数据库连接
Mybatis中一对多mapper配置
Mybatis中一对多mapper配置
14 0
|
15天前
|
SQL Java 数据库连接
【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别
【MyBatis】MyBatis操作数据库(二):动态SQL、#{}与${}的区别
16 0
|
18天前
|
Java 数据库连接 Apache
JavaWeb基础第二章(Maven项目与MyBatis 的快速入门与配置)
JavaWeb基础第二章(Maven项目与MyBatis 的快速入门与配置)