7.MyBatis-Plus 通用Service和通用Mapper之间的关系

学了MyBatis-Plus之后发现通用Service和通用Mapper实现的功能好像都是一样的,但是其中的方法名又不同,因此想搞清楚他们之间的关系。

项目结构如下,主要关注department相关的部分

DepartmentMapper接口继承BaseMapper接口

DepartmentServiceImpl继承ServiceImpl对象并实现DepartmentService接口

在这里插入图片描述

首先摆出官网上对通用Service和通用Mapper的说明

Service CRUD 接口

  • 通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆
  • 泛型 T 为任意实体对象
  • 建议如果存在自定义通用 Service 方法的可能,就创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类
  • 对象 Wrapper 为条件构造器

Mapper CRUD 接口

  • 通用 CRUD 封装BaseMapper接口,为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器
  • 泛型 T 为任意实体对象
  • 参数 Serializable 为任意类型主键 Mybatis-Plus 不推荐使用复合主键约定每一张表都有自己的唯一 id 主键
  • 对象 Wrapper 为条件构造器

再根据项目看一下对应的继承关系图

在这里插入图片描述

从图中可以看到ServiceImpl实现了IService接口并依赖BaseMapper接口,Service必须要依赖BaseMapper这个接口来实现。

再看看他们实现的方法

在这里插入图片描述

可以看到IService除了提供基本的CRUD操作以外还提供了很多的批处理方法,而BaseMapper只提供了一些基础的CRUD操作。也就是说IService在BaseMapper的基础上封装了更多的方法,但最终还是要依赖于BaseMapper。

参考资料

  1. https://blog.csdn.net/baiwenjiebwj/article/details/115207084?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&utm_relevant_index=1
  2. https://blog.csdn.net/qq_28967139/article/details/118764545
  3. https://xw.qq.com/cmsid/20220106A001V400
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐