Mybatis自动生成的Example类的使用与解析

在上篇文章我有讲到mybatis如何自动生成我们所需的dao代码,今天我们把上篇文章遗留的问题给大家讲解一下。个人拙见,欢迎补充。

上篇文章中我有说过利用Mybatis自动生成的Example类可以满足我们90%甚至更多的SQL需求,简直不要太好用。废话不多说,直接先说它怎么用。


目录

一、使用

二、Example查询流程


一、使用

Example类中对每个字段都生成了很多方法供我们组装条件。大致如下(英文好的同学一看就知道,因为人家严格遵守见名知意的规范)。

  1. and字段名IsNull

用于组装某个字段为null的条件。相当于sql: and  s.name = null;(这里的s.name为举例)

举例:

new Example类略

exampl.createCriteria().andNameIsNull();

     2.and字段名IsNotNull

很明显啦!就是组装这个字段不为null的条件,相当于(不举例了!!我对你们的智商很有自信)

举例:

new Example类略

exampl.createCriteria().andNameIsNotNull();

     3.and字段名EqualTo

不解释,你品!你细品!!算了,还是要说一下,省的你们说我偷懒。这个就是组装字段等于某个值的条件,相当于sql: and s.name = "我最帅",你字段是什么类型,那么参数就是什么类型,数值类型的等于也是用这个,人家封装了的,你很聪明,人家也不傻!

举例:

new Example类略

exampl.createCriteria().andNameEqualTo("我最帅");

    4.and字段名NotEqualTo

不解释,不懂得参考第二第三条!还不懂的就该补习一下英语了!不,是补一下脑子!!

    5.and字段名GreaterThan

组装该字段大于条件,相当于sql: and s.count > 10

举例:

new Example类略

exampl.createCriteria().andCountGreaterThan(10);

  6.and字段名GreaterThanOrEqualTo

很明显,组装大于等于嘛!相当于sql: and s.count >= 10

举例:

new Example类略

exampl.createCriteria().andCountGreaterThanOrEqualTo(10);

  7.and字段名LessThan

组装条件小于等于,相当于sql: and s.count <= 10 

举例:

new Example类略

exampl.createCriteria().andCountLessThan(10);

 8. and字段名LessThanOrEqualTo

组装小于等于条件,相当于sql:and s.count <= 10

举例:

new Example类略

exampl.createCriteria().andCountGreaterThanOrEqualTo(10);

9.and字段名Like

相当于sql: and s.name like....

举例

new Example类略

exampl.createCriteria().andNameLike("%我最帅%");

10.and字段名NotLike

就是你的字段不喜欢了,不爱了!

11.and字段名In

相当于sql: s.name in (...) ,需要注意的是,参数一般为List

举例

new Example类略

exampl.createCriteria().andNameIn(nameList);

12.and字段名NotIn

就是不进去了!不在里面了!没有举例!

13.and字段名between

一般为两个参数,相当于sql: and s.date between ... and...

举例

new Example类略

exampl.createCriteria().andDateBetween(startDate,endDate);

14.and字段名NotBetween

就是不在这个区间,举例就免了,举不动了

15.setOrderByClause

order by 都出现了,毫无疑问,这个就是排序了,参数为‘字段名 ASC’或‘字段名 DESC’,也可以多列排序 ‘字段名 DESC ,字段名 DESC’

举例

new Example类略

example.setOrderByClause("Name ASC,Count DESC");

需要注意的是,这里的字段名是数据库的字段名哦。

16.setDistinct

去重,参数为boolean类型,但据说这个方法略坑,要满足所有属性重复才会有效果,笔者还没实践,感兴趣的小伙伴可以试一下是不是那样。

好了,Example类的方法常用的的就是这些了。感兴趣的小伙伴可以继续往下和笔者一起交流一下Example类组装条件增删改查的流程。

二、Example查询流程

其实很简单,跟一下代码就能知道大概的流程,不信我们来跟一下,这里以我的代码为例

如图,我们可以看到,我这里查询产品标签的时候就直接封装标签实体类对应的Example类,先创建一个Example类,然后组装条件,调用dao接口查询

如图,我们调的就是这个dao接口,参数就是example类 ,然后dao调用mybatis对应的xml文件

如图,最终调的就是这个xml文件中的这个select,可以看到, 它对我们组装的SQL先判断了是否需要去重,如果我们前面调用了example.setDistinct(true),那在这个地方就会加上distinct关键字,往下走,它使用include标签组装了一个查询所有列的动态SQL,其实就是把所有列名添加进去了,如下图:

再往下,重点来了,它在内部封装了一个“_parameter”,就是我们的参数,判断参数如果不为空,则再加一段sql,一段动态组装我们添加的条件的sql片段,如下图

在这个片段中mybatis通过遍历Criteria对象来获取我们组装的条件集合,为什么我们的条件会在Criteria中呢?不是用Example类组装的吗?莫慌,我们回头看一下,小伙伴们会发现我们前面所说的Example类的方法除了排序和去重之外,其他的都需要先createCriteria()才能添加条件,什么情况呢?看图你就知道了

可以看到,我们的Example类中还有三个静态内部类 这三个内部类各司其职,首先,我们调用example.createCriteria()来创建了一个GeneratedCriteria对象的子类对象Criteria,然后我们组装条件时Criteria对象调用父类方法进行组装,都组装到了Griterion对象集合中,也就是父类的criteria属性。也就是说除了排序和去重之外,我们每组装一个条件都在Griterion对象集合中添加了一个元素,然后在xml文档中遍历这个集合,判断这个集合的每个属性是否为空,不为空则说明我们组装的有对应的条件,然后添加条件到sql中。如果觉得有点迷糊的话,看看下面的图也许你会明白点

 

创建 Criteria对象

组装条件的方法 

 调用的方法其实就是将条件封装到了Griterion对象集合中

最后在xml中遍历添加

 

这就是完整的Example类的组装SQL流程。如果对你有所启发不要忘了点赞哦,和我有不同意见的 也欢迎补充,我们一起进步。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值