Python 官方文档:入门教程 => 点击学习
记录查找自动组拼sql语句的过程 首先在BaseMapper其中的一个方法下打个断点 在断点显示的值栏找到相关的SQL 发现SQL语句在MappedStatement对象中,而sq
首先在BaseMapper其中的一个方法下打个断点
在断点显示的值栏找到相关的SQL
发现SQL语句在MappedStatement对象中,而sqlSource存的就是相关的sql语句
然后在MappedStatement这个对象打断点,看看到底是哪个对象对它进行了操作
发现是AutoSqlInjector创建了MappedStatement
在AutoSqlInjector对象找到与selectById相关的一个方法,打断点
SqlSource果然在这里创建出来了,createSqlSource就是具体过程,然后添加到MappedStatement对象中,此SQL完成组拼
在createSqlSource方法打下断点,进入具体的组拼过程
方法sqlSelectColumns就是具体的组拼方法,一直在此方法进行递归
在此方法中,迭代器在不断迭代组拼
最后SQL全部完成组拼,存在集合对象中,就可以取出来了
学会从逆推到顺推,学会怎样打断点是关键。
前段时间不是在实习嘛,公司用的是注解开发不用xml的,特此记录注解版动态拼接sql,还有使用过程中踩坑集合。
先记录1.0版本,以后遇到别的在完善就是。
其实就是在xml那种格式下面最外面一层用< /script > 标签包住就行了,其余部分用英文双引号包住,表达式用单引号包住就ok了,@Param(“idMin”) Integer idMin与#{idMin}对应。
不过我这里如果idMin为null那么between null and 20是查不出数值的,< /script > 标签是重点,这种sql业务逻辑读者以后自己改。
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);
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: Mybatis-Plus的SQL语句组拼原理说明
本文链接: https://lsjlt.com/news/127964.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0