MybatisPlus 的入门与实践:IService接口 实现 CRUD,简化数据库操作

引言

在MybatisPlus框架中,IService接口扮演着重要的角色。作为一个通用的服务接口,IService定义了一系列数据库操作方法,包括查询、插入、更新、删除等。这些方法的定义使得在服务层进行数据库操作变得更为便捷和高效。

IService 概述

MyBatis-Plus 中有一个接口 IService 和其实现类 ServiceImpl,封装了常见的业务层逻辑,详情查看源码 IService 和 ServiceImpl

  • IService 接口是一个泛型接口,定义了一组通用的基础方法,包括常见的增删改查操作。例如,它提供了插入数据、根据主键更新数据、根据主键删除数据、根据主键查询数据等方法的签名。用户可以根据自己的需求和业务逻辑在自定义的服务接口中继承 IService 接口,并实现其中的方法。

  • ServiceImpl 类是 IService 接口的默认实现类,提供了基本的增删改查操作的实现细节。它使用了泛型参数来规范实体类和主键类型,并实现了 IService 接口中定义的方法。用户可以继承 ServiceImpl 类,并在自己的实现类中添加或重写更具体的业务逻辑。

IService 接口的优势

  1. 减少重复代码IService 接口提供了一系列通用的数据库操作方法,避免了在服务层中编写大量的重复代码。
  2. 提高开发效率:通过继承 IService 接口和 ServiceImpl 类,可以快速实现服务层的数据库操作功能,提高开发效率。
  3. 易于维护IService 接口的封装使得服务层的代码更加清晰、简洁,易于理解和维护。

IService接口的具体使用

  1. 继承IService接口:在服务层中,可以定义一个具体的服务接口继承自IService接口,例如public interface UserService extends IService<User>

  2. 实现IService接口:然后,需要实现这个具体的服务接口。MybatisPlus提供了ServiceImpl类作为IService接口的实现类,可以通过继承ServiceImpl类来快速实现IService接口中的方法。例如public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService

  3. 调用IService接口方法:在服务层的其他类中,可以通过注入具体的服务类来调用IService接口中的方法。例如,在Controller层中注入UserService,然后调用其提供的list、getById等方法来获取数据。

因此我们在使用的时候仅需在自己定义的 Service 接口中继承 IService 接口,在自己的实现类中实现自己的 Service 并继承 ServiceImpl 即可

通用 Service CRUD 封装 IService 接口,进一步封装 CRUD 采用如下前缀命名方式区分 Mapper 层,以避免混淆

  • get 查询单行
  • remove 删除
  • list 查询集合
  • page 分页

如果存在自定义通用 Service 方法的可能,需要创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类

IService 中的 CRUD 方法

新增:Save、SaveOrUpdate
Save
类型 参数名 描述
T entity 实体对象
Collection<T> entityList 实体对象集合
int batchSize 插入批次数量
// 插入一条记录(选择字段,策略插入)
boolean save(T entity);

// 插入(批量)
boolean saveBatch(Collection<T> entityList);

// 插入(批量,限制数量)
boolean saveBatch(Collection<T> entityList, 
				  int batchSize);
SaveOrUpdate
类型 参数名 描述
T entity 实体对象
Wrapper<T> updateWrapper 实体对象封装操作类 UpdateWrapper
Collection<T> entityList 实体对象集合
int batchSize 插入批次数量
// TableId 注解存在更新记录,否则插入一条记录
boolean saveOrUpdate(T entity);

// 根据 updateWrapper 尝试更新,否则继续执行 saveOrUpdate(T) 方法
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);

// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);

// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList, 
						  int batchSize);
批量新增

可以开启 rewriteBatchedStatements=true 参数,提高批处理的执行效率。

删除:Remove
类型 参数名 描述
Wrapper<T> queryWrapper 实体包装类 QueryWrapper
Serializable id 主键 ID
Map<String, Object> columnMap 表字段 map 对象
Collection<? extends Serializable> idList 主键 ID 列表
// 根据 entity 条件,删除记录
boolean remove(Wrapper<T> queryWrapper);

// 根据 ID 删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值