mybatis中${}和#{}的区别以及底层原理分析
${}和#{}的区别以及底层原理
${}
不会自动加 ' ',如果传入参数为简单类型,那么必须写 ${value},如果是对象,写的是${属性名};
底层解析的时候只要sql语句包含 ${ } ,在创建cofigration对象的时候,这条sql就会被解析成动态类型的语句,底层不会把 ${ } 转成 " ? "(不做处理),只会在使用Mapper接口代理对象进行数据操作的时候把#{ }转成 " ? ",之后再调用JDBC进行赋值,把${ }转成mapper接口的参数值,所以会存在SQL注入的问题
#{}
对于字符串会自动加 ' ',如果传入参数为简单类型,可以写 ${任意值},如果是对象,写的是${属性名}
底层解析的时候如果sql语句只包含 #{ } ,这条sql就会被解析成静态类型的语句,会把 #{ }转成 " ? ",进行数据操作时调用JDBC进行赋值
#{}和${}取值符号
如图,两个方法的参数类型为简单类型,简单类型包括8大基本类型和String
- 1. #{}取值符号会自动为String类型的参数加上‘’单引号
- 2. ${}取值符号不会自动为String加上‘’单引号
当sql标签的查询代码是 select * from t_user where username = ‘lyx’;
这种情况,需要使用自动加上单引号的#{}:select * from t_user where username = #{username}
当查询数据降序排序时:
UserDao接口如下:

select * from t_user order by 排序字段名 desc
UserMapper.xml文件如下:

调用

- queryUserOrderByColumn(String column)运行结果

- queryUserOrderByColumn2(String column)运行结果2

- 看数据库中的数据,说明方法1没有成功降序排序

所以对于动态排序的sql语句,要用${},而不用#{}
对于排序正确 的代码是
select * from t_user order by username desc
如果使用#{},会自动为String类型添加单引号,变成
select * from t_user order by 'username' desc
所以查不到数据
来看使用${}的第二种情况:模糊查询
sql语句应该是,
LIKE_ (单个任意字符) 列名 LIKE ‘张_' LIKE % (任意长度的任意字符) 列名 LIKE ‘张%'

显然,使用 ${},不自动添加单引号才是正确的
调用运行

运行结果:

总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Java多线程编程中使用Condition类操作锁的方法详解
Condition是java.util.concurrent.locks包下的类,提供了对线程锁的更精细的控制方法,下面我们就来看一下Java多线程编程中使用Condition类操作锁的方法详解2016-07-07
Java JUC并发之.util.concurrent并发工具包使用指南
JUC就是java.util .concurrent工具包的简称,这是一个处理线程的工具包,JDK 1.5开始出现的,这篇文章主要介绍了Java JUC并发之.util.concurrent并发工具包使用的相关资料,需要的朋友可以参考下2025-08-08
org.slf4j.Logger中info()方法的使用详解
这篇文章主要介绍了org.slf4j.Logger中info()方法的使用详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-12-12
解决SpringBoot使用@Value获取不到yaml中配置值的问题
在最近的开发中遇到一个问题,使用@Value获取yml文件中配置的属性时始终获取不到值,所以本文给大家详细介绍了SpringBoot使用@Value获取不到yaml中值的问题分析及解决方法,需要的朋友可以参考下2024-01-01
Spring整合SpringMVC与Mybatis(SSM)实现完整登录功能流程详解
开学学校开始讲servlet 后期要求做一个登录功能,这个使用SSM先只做个简单的只带登录功能的,且项目使用了MyBatis-Plus来简化开发流程。看情况决定要不要升级功能或者换个写法2022-09-09
springboot中使用undertow踩坑记(最新推荐)
这篇文章主要介绍了springboot中使用undertow踩坑记,springboot内置类web中间件,将web服务器管理权交给了容器,本文分步骤给大家介绍的非常详细,需要的朋友可以参考下2024-08-08


最新评论