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

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
MyBatis-Plus是一个基于MyBatis的简化超全局的ORM(Object-Relational Mapping)框架,它在MyBatis的基础上进行了增强,使得开发更便捷。如果你想定义一个公共的MapperService,可以按照以下步骤操作: 1. **定义Mapper**: 首先,在项目目录下的`src/main/java`下创建一个Mapper接口文件,例如`com.example.common.mapper.BaseMapper.java`。这个接口将包含所有共有的基础查询方法,比如通用的CRUD操作: ```java // BaseMapper.java public interface BaseMapper<T> { T selectOne(Object params); // 查询一条数据 List<T> selectList(Object params); // 查询列表 int insert(T record); // 插入数据 int update(T record); // 更新数据 int deleteById(Object id); // 删除指定ID的数据 } ``` 2. **实现具体的Mapper**: 对于每个业务模块,你需要创建对应的实体类,并创建该实体类的Mapper子类去实现BaseMapper接口,添加业务相关的自定义方法。 3. **定义Service**: Service层通常负责整合Mapper的操作,处理复杂的业务逻辑。你可以创建一个名为`BaseService.java`的服务类,继承自`com.baomidou.mybatisplus.extension.service.IService`,然后注入对应Mapper: ```java // BaseService.java @Service public abstract class BaseService<T extends Entity, M extends Mapper<T>> implements IService<T> { private final M baseMapper; public BaseService(M baseMapper) { this.baseMapper = baseMapper; } // 使用BaseMapper的方法,如通用的CRUD操作... } ``` 4. **使用Service**: 在实际业务模块中,创建对应实体类的Service实例,调用其提供的方法完成业务操作。每个模块可以根据需要重写或扩展BaseService的方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值