处理mybatis plus 批量插入缓慢的问题

自定义一个批量插入接口,

注意 批量插入的 方法 必须是:insertBatchSomeColumn


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

import java.util.Collection;

/**
 * 批量插入数据 基础 mapper
 *
 * @param <T>
 */
public interface MyBaseMapper<T> extends BaseMapper<T> {
    /**
     * 批量插入
     *
     * @param entityList 实体列表
     * @return 影响行数
     */
    Integer insertBatchSomeColumn(Collection<T> entityList);

}

 实现方法 配置类


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;

/**
 * 批量插入配置类
 */

public class BatchSqlInjector 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;
    }

}

将 配置类 注入到 mybatis plus的 配置文件里面

 

慢的原因就是 mybatis plus 批量插入获取用户名和时间的时候比较慢,直接手动插入创建时间、创建人等参数,如果有id 就手动生成id,手动set

业务代码

@Transactional
@Override
public int add(CrmOrganizeProduct crmOrganizeProduct) {
	List<Long> productIds = crmOrganizeProduct.getProductIds();
	List<Long> organizeIds = crmOrganizeProduct.getOrganizeIds();
	String userId = SecurityUtils.getUserIdStr();
	Date date = new Date();
	// 创建待插入的对象列表
	List<CrmOrganizeProduct> list = new ArrayList<>();
	for (Long productId : productIds) {
		for (Long organizeId : organizeIds) {
			CrmOrganizeProduct cp = new CrmOrganizeProduct();
			cp.setOrganizeId(organizeId);
			cp.setProductId(productId);
			cp.setProductId(productId);
			cp.setCreateBy(userId);
			cp.setUpdateBy(userId);
			cp.setCreateTime(date);
			cp.setUpdateTime(date);
			cp.setDelFlag(SYN.NO.getValue());
			list.add(cp);
		}
	} 
	// 批量插入新记录
	long start = System.currentTimeMillis();
	crmOrganizeProductMapper.insertBatchSomeColumn(list);
	double selectDateTime = (System.currentTimeMillis() - start) / 1000.0;
	System.out.println(  "  =============  执行的时间 : " + selectDateTime      );
	return productIds.size();
	return productIds.size();
}




crmOrganizeProductMapper这个mapper 继承 自定义的批量插入的接口 MyBaseMapper
public interface CrmOrganizeProductMapper extends MyBaseMapper<CrmOrganizeProduct> {

批量插入280条数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值