springBoot+mybatisPlus批量插入,千万数据导入,真实可用

     java开发springBoot+mybatisPlus已经成为主流,最近遇到新旧系统的切换,批量插入读取原来的数据插入到新的系统的表中,使用mybatisPlus的方法

saveBatch(),但是发现巨慢,查询源码和sql发现其实里面也是遍历之后再单条插入,难怪慢呢.其实就是伪批量,可能再事务提交上有处理,但是还是不能容忍.查资料整理出来一套正式的批量插入方法,生产已经使用,实测10W数据.1-3分钟左右可插入,完全可以满足需求,有需要的小伙伴可以参考,简简单单集成到自己的系统,废话不多说,直接上代码:

第一步:创建 EasySqlInjector到spring容器

@Bean
public EasySqlInjector easySqlInjector() {
    return new EasySqlInjector();
}

第二部:创建自定义mapper接口

自定义 mapper接口,扩展BaseMapper,并使用mybatis的真实批量插入方法
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import java.util.Collection;

/**
 * @description:批量插入
 * @author: xxx
 * @create: 2020-12-21 14:27
 **/
public interface EasyBaseMapper<T> extends BaseMapper<T> {
    /**
     * 批量插入
     *
     * @param entityList 实体列表
     * @return 影响行数
     */
    Integer insertBatchSomeColumn(Collection<T> entityList);
}

第三步:创建批量插入的实现类  BaseIServiceImpl

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.atomic.AtomicReference;

/**
 * @description:批量插入的方法
 
 **/
@Service
@Slf4j
public class BaseIServiceImpl<M, T> {

    @Autowired
    @Qualifier(value = "defaultThreadPoolExecutor")
    private ThreadPoolExecutor threadPoolExecutor;


    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值