MGB的生成代码解析
@
目录
问题描述
文字描述
问题是在我刚刚学习MyBatis逆向工程时出现的,我发现使用Example是可以创建两个Criteria对象,并且两个对象也都可以添加条件,但是在运行过程中只会执行第一次创建的Criteria对象中的条件,我就在想这到底是是为什么,于是乎就有了这篇文章
图片描述
运行结果可以看到只执行了第一个条件
问题解决
一、关于问题的解决思路
有了上述的问题后,我便有了大体的解决方法,那就是看看它到底是怎么运行的不就好了吗
二、源码的解析
有了思路后我就去查看了example的源码,发现了执行路线如下图所示
0,运行步骤解析
1,创建Example对象
根据xml文件的查看,可以看出上边创造的集合就是用来存储条件的
2,创建criteria对象
3,加入条件
注意:第二张图中执行add方法的并不是Criteria对象,而是一个存储Criteria对象的集合,此集合为Criteria的父类构造方法创建。
我们可以通过xml文件可以了解到Criteria集合与oredCriteria集合分别是用来干什么的。
4、创建第二个Criteria对象
5、加入条件
此处与第三步相同
6、总结
我们经过上述步骤的研究已经基本解决了最开始的疑惑,原来在设定条件时,逆向工程会创建两个集合,一个用于存储条件,一个用于存储Criteria对象,存储Criteria对象的只能存储第一个对象,想要存储第二个对象就必须调用or方法,让两个存储了条件的对象做or判断才行。