Mybatis-Plus的SQL语句组拼原理

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

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

Mybatis-Plus的SQL语句组拼原理_第1张图片

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

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

 

Mybatis-Plus的SQL语句组拼原理_第2张图片

 

 Mybatis-Plus的SQL语句组拼原理_第3张图片

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

Mybatis-Plus的SQL语句组拼原理_第4张图片

发现是AutoSqlInjector创建了MappedStatement

Mybatis-Plus的SQL语句组拼原理_第5张图片

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

Mybatis-Plus的SQL语句组拼原理_第6张图片

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

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

Mybatis-Plus的SQL语句组拼原理_第7张图片

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

Mybatis-Plus的SQL语句组拼原理_第8张图片

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

Mybatis-Plus的SQL语句组拼原理_第9张图片

最后SQL全部完成组拼,存在集合对象中,就可以取出来了 

总结:学会从逆推到顺推,学会怎样打断点是关键

你可能感兴趣的:(mybatis-plus)