Mybatis-plus中BaseMapper和IService功能相似重复,为什么要提供两个接口?

由于最近项目中打算尝试使用mybatis-plus(此前一直在用mybatis),于是就去学习了一下,在浏览官方文档时产生了本文标题所示的疑问。
问题产生后,首先自然是寻求官方的解释,但是结果如下:
1、官方指南中“FAQ-常见问题”章节并没有对此作出解释;
2、官方指南中“核心功能-CRUD接口”章节有如下两段描述,从字面意思理解,IService接口只是对BaseMapper的进一步封装,查看两者的api源码后发现,貌似主要是封装了批量操作;

在这里插入图片描述

image.png

综合来看,比较合理的解释是:
1、从分层角度来解释,BaseMapper是DAO层的CRUD封装,而IService是业务业务逻辑层的CRUD封装,所以多了批量增、删、改的操作封装,这也比较符合官方指南中的阐述;
2、IService是对BaseMapper的扩展,从BaseMapper、IService、ServiceImpl三者的类关系以及源码可以看出;
此外,个人认为应该还有一个原因,就是IService和BaseMapper提供的是两种实现方式:
如果继承BaseMapper,则不需要去实现其内部方法,依靠mybatis的动态代理即可实现CRUD操作;
而如果自定义IBaseService去继承IService,则需要去实现IService中的方法;

image.png
image.png

你可能感兴趣的:(Mybatis-plus中BaseMapper和IService功能相似重复,为什么要提供两个接口?)