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

由于最近项目中打算尝试使用mybatis-plus(此前一直在用mybatis),于是就去学习了一下,在浏览官方文档时产生了本文标题所示的疑问。
问题产生后,首先自然是寻求官方的解释,但是结果如下:
	1、官方指南中“[FAQ-常见问题](https://baomidou.com/guide/faq.html)”章节并没有对此作出解释;
	2、官方指南中“[核心功能-CRUD接口](https://baomidou.com/guide/crud-interface.html)”章节有如下两段描述,从字面意思理解,IService接口只是对BaseMapper的进一步封装,查看两者的api源码后发现,貌似主要是封装了批量操作;
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20201223232322844.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JhbmtaaGFv,size_16,color_FFFFFF,t_70)

在这里插入图片描述
既然官方没有给出详细的解释说明,那我只能去网上搜索前辈们对此疑问的解释,最终搜到以下三篇分析此问或稍有涉及的文章:
https://blog.csdn.net/pingfandehaozai/article/details/103537250
https://zhuanlan.zhihu.com/p/114451975
https://blog.csdn.net/yezonggang/article/details/110954058
综合来看,比较合理的解释是:
1、从分层角度来解释,BaseMapper是DAO层的CRUD封装,而IService是业务业务逻辑层的CRUD封装,所以多了批量增、删、改的操作封装,这也比较符合官方指南中的阐述;
2、IService是对BaseMapper的扩展,从BaseMapper、IService、ServiceImpl三者的类关系以及源码可以看出;
此外,个人认为应该还有一个原因,就是IService和BaseMapper提供的是两种实现方式:
如果继承BaseMapper,则不需要去实现其内部方法,依靠mybatis的动态代理即可实现CRUD操作;
而如果自定义IBaseService去继承IService,则需要去实现IService中的方法;
在这里插入图片描述
此类图有处小问题,ServiceImpl应当持有BaseMapper对象,是组合关系,而非依赖关系

  • 17
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值