Mybatis-Plus的SQL语句组拼原理说明
作者:gblfy 发布时间:2021-07-03 20:39:22
记录查找自动组拼SQL语句的过程
首先在BaseMapper其中的一个方法下打个断点
在断点显示的值栏找到相关的SQL
发现SQL语句在MappedStatement对象中,而sqlSource存的就是相关的sql语句
然后在MappedStatement这个对象打断点,看看到底是哪个对象对它进行了操作
发现是AutoSqlInjector创建了MappedStatement
在AutoSqlInjector对象找到与selectById相关的一个方法,打断点
SqlSource果然在这里创建出来了,createSqlSource就是具体过程,然后添加到MappedStatement对象中,此SQL完成组拼
在createSqlSource方法打下断点,进入具体的组拼过程
方法sqlSelectColumns就是具体的组拼方法,一直在此方法进行递归
在此方法中,迭代器在不断迭代组拼
最后SQL全部完成组拼,存在集合对象中,就可以取出来了
学会从逆推到顺推,学会怎样打断点是关键。
mybatisPlus注解版动态拼接sql
前段时间不是在实习嘛,公司用的是注解开发不用xml的,特此记录注解版动态拼接sql,还有使用过程中踩坑集合。
先记录1.0版本,以后遇到别的在完善就是。
其实就是在xml那种格式下面最外面一层用< /script > 标签包住就行了,其余部分用英文双引号包住,表达式用单引号包住就ok了,@Param(“idMin”) Integer idMin与#{idMin}对应。
不过我这里如果idMin为null那么between null and 20是查不出数值的,< /script > 标签是重点,这种sql业务逻辑读者以后自己改。
/**
* @author zzh
* @since 2021-01-26
*/
public interface GoodsMapper extends BaseMapper<Goods> {
@Select("<script>"
+ "select * from goods where id between"
+ "<if test='#{idMin}!=null'>" + "#{idMin} and "+"</if>"
+ "<if test='#{idMax}!=null'>" + "#{idMax}" + "</if>"
+ "</script>")
public List<Goods> select(@Param("idMin") Integer idMin, @Param("idMax") Integer idMax);
}
来源:https://gblfy.blog.csdn.net/article/details/109171159
猜你喜欢
- Map的存储结构式Key/Value形式,Key 和 Value可以是普通类型,也可以是自己写的JavaBean(本文),还可以是带有泛型的
- Java Benchmark 基准测试的实例详解import java.util.Arrays; import java.util.conc
- Random random = new Random((int)(DateTime.Now.Ticks)); &nbs
- 1.最常用的方法是创建一个计数器,判断是否遇到‘\0',不是'\0'指针就往后加一。int my_strlen(co
- Java中方法重写与重载的区别重 写重 载子类方法对父类方法的覆盖同一个类中同名方法的重载(同一类包括从父类继承的方法)方法名相同且参数个数
- 本文实例为大家分享了java抓取邮箱号码的具体代码,供大家参考,具体内容如下java抓取文件中邮箱号码的具体代码package reg;im
- 实现一个顺序表接口实现定义一个MyArrayList类,在类中实现以下函数public class MyArrayList {}数组的定义p
- Zipkin是一种分布式跟踪系统。它有助于收集解决微服务架构中延迟问题所需的时序数据。它管理这些数据的收集和查找。Zipkin的设计基于&n
- 这篇文章主要介绍了Java实现发送手机短信语音验证功能代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 在分支较多的时候,switch的效率比if高,在反汇编中我们即可看到效率高的原因一、switch语句1、在正向编码时,switch语句可以看
- 这篇文章说明了如何通过Maven配置Spring依赖项。最新的Spring版本可以在Maven Central上找到。Maven中的Spri
- 前言先放一个官网吧,其实本案例就是根据官网案例来的,只是进行了修改配置。Mybatis-plus官网一、搭建一个springboot项目&n
- 一、Ctrl+F或者Ctrl+Shift+R 按照文本的内容查找1. 相当于eclipse的ctrl+H,Ctrl+F是在本页查找2. 相当
- 1.瞬时流量过高,服务被压垮?2.恶意用户高频光顾,导致服务器宕机?3.消息消费过快,导致数据库压力过大,性能下降甚至崩溃?......在高
- 引言:关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽。上次突然一个同事问了我jav
- Docker 存储驱动详细介绍最近做项目,期间对Docker 存储驱动不会,于是在网上找资料,并解决了,这里就记录下。目的理解docker的
- 本文实例讲述了java两种单例模式用法。分享给大家供大家参考,具体如下:按照加载方式的不同,单例模式有两种实现:private:只能在同一个
- synchronized关键字,一般称之为”同步锁“,用它来修饰需要同步的方法和需要同步代码块,默认是当前对象作为锁的对象。同步锁锁的是同一
- 前言:由于项目需求,短信验证码的接口需要换成阿里大于的,但是尴尬的发现阿里大于的jar包没有maven版本的,于是便开始了一上午的 * 引包之
- 具体详情如下所示:int -> Stringint i=12345;String s="";第一种方法:s=i+&