【Mybatis-Plus】自定义mybatis-plus的批量插入语句

    一、前言

    二、自定义方法实现思路

    三、代码中运用


    一、前言

                mybatis-plus因为其特性,不需要程序员手动编写SQL,极大的提高了开发效率,使用过程中我们会发现,有些我们需要方法在mybatis-plus中不存在,如批量添加,那么我们可以根据mybatis-plus提供的自定义方法工具来实现我们需要的方法。自定义方法一共三步如下1、2、3:

    二、自定义方法实现思路

   1、创建一个自定义的SqlInjector类,继承DefaultSqlInjector类,将自定义的加入到方法列表中。

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;

import java.util.List;

/**
 * @Author: 宁兴星
 * @CreateTime: 2025-01-16
 * @Description: TODO
 */
public class MySqlInjector extends DefaultSqlInjector {
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass, TableInfo tableInfo) {
        List<AbstractMethod> methodList = super.getMethodList(mapperClass, tableInfo);
        methodList.add(new InsertBatchSomeColumn(i -> i.getFieldFill() != FieldFill.UPDATE));
        return methodList;
    }
}

2、将定义好的SqlInjector类配置到Mybatis-Plus的Configuration中

/**
 * @Author: 宁兴星
 * @CreateTime: 2025-01-16
 * @Description: TODO
 */
@Configuration
public class MybatisConfig {

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

    /**
     * 配置MyBatis-Plus拦截器,用于添加分页等功能插件
     *
     * @return MybatisPlusInterceptor对象
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加分页插件,设置数据库类型为MySQL
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        // 添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }

}

3、自定义Mapper接口,继承原plus的BaseMapper

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import java.util.Collection;

/**
 * @Author: 宁兴星
 * @CreateTime: 2025-1-16
 * @Description: TODO
 */
public interface MyBaseMapper<T> extends BaseMapper<T> {
    /**
     * 自定义plus批量插入
     *
     * @param entityList
     * @return
     */
    int insertBatchSomeColumn(Collection<T> entityList);
}

三、代码中运用

4、在自己的Mapper接口中,继承自定义的MyBaseMapper

import com.smart.cms.inte.config.mybatisplusconfig.MyBaseMapper;
import org.apache.ibatis.annotations.Mapper;


/**
 * @Author: 宁兴星
 * @CreateTime: 2025-01-16
 * @Description: TODO
 */
@Mapper
public interface StudentMapper extends MyBaseMapper<studentDto> {

    
}

5、使用


@Service
public class StudentServiceImpl implements StudentService {
    
    private final StudentMapper studentMapper;

    public StudentServiceImpl (StudentMapper studentMapper) {
        this.studentMapper= studentMapper;
    }
    
    public void test(List<StudentDto> studentList) {
        studentMapper.insertBatchSomeColumn(studentList);
    }
    

}

        本次分享就结束啦,如有错误,敬请雅正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值