mybatis-plus 自定义basemapper支持批量增删改操作

本文介绍了mybatis-plus中BaseMapper与IService的区别,并详细讲解如何通过自定义BaseMapper来支持批量增删改操作,从而在不依赖IService的情况下,依然能利用批量接口功能。
摘要由CSDN通过智能技术生成
  • com.baomidou.mybatisplus.core.mapper.BaseMapper
  • com.baomidou.mybatisplus.extension.service.IService

经常使用mybatis的开发朋友们都知道mybatis提供了上述两种类型的预定义接口来帮助我们做单表的增删改查操作,IService方式和BaseMapper这两种方式的区别以及联系是如何的呢? 下面我们来分析~~

接口区别

在这里插入图片描述

  1. 首先从提供的方法上名字有些许不同,功能大致是类似的,但是IService提供了更多的接口,包括BaseMapper不支持的批量增删改。更确切的来说,IService<M,T> 针对业务逻辑层的封装 需要指定Dao层类和对应的实体类 是在BaseMapper基础上的加强,因为其内部方法实现依旧调用的是BaseMapper里面的接口。如果你需要使用mp提供的批量接口,使用Iservice是比较合适的。
  2. IService的的默认是ServiceImpl<Dao,Entity> 需要提供Dao和对应的Entity,如果只想用其中一个,而且你觉得IService依赖BaseMapper比较多此一举,想要直接使用BaseMapper但有舍不得IService提供的批量增删改的功能,那就往下看如何通过自定义BaseMapper来加入批量功能的实现吧。

1. 自定义BaseMapper

package momenta.hdmap.antbear.common.mpbase;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.List;

/**
 * 自定义baseMapper&#
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MyBatis-PlusBaseMapper 接口中的 insert 方法是如下实现的: ```java @Lang(XMLLanguageDriver.class) public interface BaseMapper<T> extends Mapper<T>, BaseSelectMapper<T>, BaseInsertMapper<T>, BaseUpdateMapper<T>, BaseDeleteMapper<T>, ConditionMapper<T>, IdsMapper<T>, ExampleMapper<T>, MySqlMapper<T> { //... } ``` 可以看到,BaseMapper 接口继承了多个接口,这些接口分别定义了对应的增删查方法。在这里,我们关注 BaseInsertMapper 接口,它定义了 insert 和 insertBatch 方法,这些方法的具体实现是由 MyBatis-Plus 框架通过动态 SQL 实现的。 以 insert 方法为例,其具体实现是在 InsertMapper 接口中定义的: ```java @Deprecated int insert(T entity); default int insertBatchSomeColumn(Collection<T> entityList) { return insertBatchSomeColumn(entityList, 100); } int insertBatchSomeColumn(Collection<T> entityList, int batchSize); ``` 可以看到,insert 方法被标记为 @Deprecated,推荐使用 insertBatchSomeColumn 方法。这个方法的具体实现是在 MyBaseMapper 接口中定义的: ```java int insertBatchSomeColumn(List<T> entityList); ``` 可以看到,insertBatchSomeColumn 方法的具体实现是通过 MyBatis-Plus 框架提供的动态 SQL 实现的。该方法会将传入的实体对象列表转换成对应的 SQL 语句,并通过 MyBatis 的内置机制执行 SQL 语句,从而实现批量插入数据的功能。 需要注意的是,MyBatis-PlusBaseMapper 接口提供了一些基本的 CRUD 操作,但是并不是所有的操作都可以使用这些方法来实现。在实际使用中,需要根据具体的业务需求进行扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值