自定义一个批量插入接口,
注意 批量插入的 方法 必须是: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条数据