目录
一、概述
MybatisPlus不仅提供了mapper接口,也提供了service接口,开发者可以继承这些service接口,这样,一些基础的增删改查代码就也不需要书写了。如下图:
二、增删改查方法分析
处理新增的service的方法都是以save开头。其中
- save(T)表示新增某个类型的数据。
- saveBatch(Collection<T>)表示新增某个类型的集合,即批量新增某个类型的数据。在以前实现批量新增的时候,我们需要在mapper.xml文件中写foreach循环,然后组装一堆的数据,非常麻烦,但是现在我们可以直接调用这个方法,即可一键批处理。
- saveOrUpdateBatch(Collection<T>)表示批量新增或更新某个类型的数据,同时判断是否每个数据是否包含主键id,如果不包含,执行插入操作,如果包含,执行更新操作。
处理删除的service的方法都是以remove开头。其中
removeByIds(Collection<?>)和removeBatchByIds(Collection<?>)的区别是:
前者底层采用的是delete.....,但是where条件用的是in(id1,id2,id3.......)。而后者底层采用的是delete.....,但是where条件用的是id1=...,id2=....,id3=......,.......,不再使用in的方式了,它会采用jdbc的批处理方案来批量提交,实现批量删除。
显然,在性能上,后者会更好一些,前提是数据量非常大,否则两者在性能上的差别不会太大。
处理更新的service的方法都是以update开头(红色方框扛起了的区域)。其中
- updateById(T)表示更新一条数据,数据中为空的变量不更新到数据库对应字段,不为空的变量更新到数据库对应字段。
- updateByIdBatchById(Collection<T>)表示批量更新数据。
处理查找的service的方法分的更加细。其中
如果是查一个,那么就调用以get开头的方法,如下图:
如果是查多个,那么就调用以list开头的方法,如下图:
如果是查数量,就调用以count开头的方法,如下图:
如果要做分页查询,就调用page方法,如下图:
上面介绍的这些增删改查操作,大多数情况下,都是基于id去做的,如果要基于复杂条件,我们就需要wrapper,而传wrapper就需要我们new wrapper,这样会比较繁琐。
所以,如果要根据复杂条件做查询、更新操作,可以使用下面的方法,它们会得到LambdaQueryChainWrapper,也就是可以利用它直接基于lambdaWrapper来做查询,不需要自己去new了,更加方便。
进一步理解,可以把lambdaQuery()直接看成条件构造器,然后进行一些条件的构造,构造好后,如果要进行查询等操作,直接通过“.”的方式调用对应方法即可。如下图:
三、service接口的基本使用
1.自定义Service接口继承Iservice接口
2.自定义Service实现类,实现自定义接口并继承ServiceImpl类,其中ServiceImpl泛型要指定Mapper类型和实现类类型。