短视频源码mybatis-plus 自定义basemapper支持批量增删改操作

首先从提供的方法上名字有些许不同,功能大致是类似的,但是IService提供了更多的接口,包括BaseMapper不支持的批量增删改。更确切的来说,IService 针对业务逻辑层的封装 需要指定Dao层类和对应的实体类 是在BaseMapper基础上的加强,因为其内部方法实现依旧调用的是BaseMapper里面的接口。如果你需要使用mp提供的批量接口,使用Iservice是比较合适的。
IService的的默认是ServiceImpl 需要提供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,增加了批量增删改查的方法
 * @author yangxiaohui
 * @since 2020年3月6日16:44:17
 */
public interface MyBaseMapper extends BaseMapper {

    /**
     * 以下定义的 4个 default method,
     * copy from {@link com.baomidou.mybatisplus.extension.toolkit.ChainWrappers}
     */
    default QueryChainWrapper queryChain() {
        return new QueryChainWrapper<>(this);
    }

    default LambdaQueryChainWrapper lambdaQueryChain() {
        return new LambdaQueryChainWrapper<>(this);
    }

    default UpdateChainWrapper updateChain() {
        return new UpdateChainWrapper<>(this);
    }

    default LambdaUpdateChainWrapper lambdaUpdateChain() {
        return new LambdaUpdateChainWrapper<>(this);
    }

    // 以下定义的 4个 method,其中前3个是mybatisPlus内置的选装件(升级到3.3之后才有的)
	// 批量插入
    int insertBatchSomeColumn(List entityList);
	// 批量更新
    int alwaysUpdateSomeColumnById(@Param(Constants.ENTITY) T entity);
	// 批量删除
    int deleteByIdWithFill(T entity);

    //以下为自己自定义method
    T findOne(Serializable id);

}
  1. 自定义sql注入
package momenta.hdmap.antbear.common.mpbase;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.extension.injector.methods.AlwaysUpdateSomeColumnById;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteByIdWithFill;

import java.util.List;

/**
 * @author :XiaoHui Yang
 * @version : 1.0.0
 * @description: 自定义sql注入器·
 * @date :Created in 2020/3/6 16:10
 * @modified By:
 */
public class MySqlInjector extends DefaultSqlInjector {

    @Override
    public List getMethodList(Class mapperClass) {
        List methodList = super.getMethodList(mapperClass);
        //增加自定义方法
        methodList.add(new FindOne());

        /**
         * 以下 3 个为内置选装件
         * 头 2 个支持字段筛选函数
         */
        // 例: 不要指定了 update 填充的字段
        methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
        methodList.add(new AlwaysUpdateSomeColumnById());
        methodList.add(new LogicDeleteByIdWithFill());
        return methodList;
    }
}
  1. 加入配置类中
package momenta.hdmap.antbear.config;

import com.baomidou.mybatisplus.core.injector.ISqlInjector;

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import momenta.hdmap.antbear.common.mpbase.MySqlInjector;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * mybatis-plus配置类
 *
 * @author yangxiaohui
 */
@Configuration
public class MybatisPlusConfig {

    /**
     * 分页插件拦截器
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    /**
     * 自定义Sql注入器
     */

    @Bean
    public MySqlInjector sqlInjector() {
        return new MySqlInjector();
    }

}
  1. 使用
继承自定义的Mapper就可以了,这下可以摆脱IService了,真香~

@Mapper
public interface CaseContextDao extends MyBaseMapper {
	
}

你可能感兴趣的:(技术类,spring,mybatis,spring,boot,数据库,java)