Mybatis-Plus的SQL语句组拼原理说明

作者:gblfy 时间:2021-07-03 20:39:22 

记录查找自动组拼SQL语句的过程

首先在BaseMapper其中的一个方法下打个断点

Mybatis-Plus的SQL语句组拼原理说明

在断点显示的值栏找到相关的SQL

发现SQL语句在MappedStatement对象中,而sqlSource存的就是相关的sql语句

Mybatis-Plus的SQL语句组拼原理说明

Mybatis-Plus的SQL语句组拼原理说明

然后在MappedStatement这个对象打断点,看看到底是哪个对象对它进行了操作

Mybatis-Plus的SQL语句组拼原理说明

发现是AutoSqlInjector创建了MappedStatement

Mybatis-Plus的SQL语句组拼原理说明

在AutoSqlInjector对象找到与selectById相关的一个方法,打断点

Mybatis-Plus的SQL语句组拼原理说明

SqlSource果然在这里创建出来了,createSqlSource就是具体过程,然后添加到MappedStatement对象中,此SQL完成组拼

在createSqlSource方法打下断点,进入具体的组拼过程

Mybatis-Plus的SQL语句组拼原理说明

方法sqlSelectColumns就是具体的组拼方法,一直在此方法进行递归

Mybatis-Plus的SQL语句组拼原理说明

在此方法中,迭代器在不断迭代组拼

Mybatis-Plus的SQL语句组拼原理说明

最后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

标签:Mybatis-Plus,SQL,组拼
0
投稿

猜你喜欢

  • Java深入了解数据结构之栈与队列的详解

    2022-03-24 08:12:27
  • java使用Socket实现SMTP协议发送邮件

    2022-06-08 19:25:50
  • Java实现简易俄罗斯方块

    2022-12-18 14:07:58
  • c#开发word批量转pdf源码分享

    2022-01-12 07:37:29
  • Flutter手机权限检查与申请实现方法详解

    2022-01-15 23:52:38
  • Intellij Idea 多模块Maven工程中模块之间无法相互引用问题

    2023-11-11 07:24:51
  • Unity中C#和Java的相互调用实例代码

    2022-02-28 13:40:53
  • Spring Cloud Ribbon的踩坑记录与原理详析

    2023-02-06 04:06:55
  • c# 实现RSA非对称加密算法

    2021-10-15 10:54:06
  • 关于eclipse安装spring插件报错An error occurred while collecting items to be installed...解决方案

    2023-05-27 03:34:45
  • Java线程的调度与优先级详解

    2023-04-30 13:48:13
  • C#软件注册码的实现代码

    2021-10-14 06:14:38
  • 详解WPF中用户控件和自定义控件的使用

    2023-07-25 12:20:26
  • spring boot RestTemplate 发送get请求的踩坑及解决

    2022-01-19 16:08:09
  • 你所不知道的Spring自动注入详解

    2021-09-04 19:30:08
  • Java实现将txt文件转成xls文件的方法

    2022-05-20 10:21:25
  • Java泛型常见面试题(面试必问)

    2021-11-20 20:51:55
  • 基于JDK8总结java中的interrupt

    2021-12-27 07:43:54
  • 举例说明Java中代码块的执行顺序

    2023-12-17 08:54:51
  • Java实现简单的飞机大战游戏(控制主飞机篇)

    2023-11-14 13:52:56
  • asp之家 软件编程 m.aspxhome.com