栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatisPlus批量插入解决方案

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatisPlus批量插入解决方案

架构:springboot2.6.7 + mariadb10.x + mybatisplus2.3.x

方案一,使用原生方法(saveBatch())【性能一般,无须配置】

使用原生方法插入,每次最多只能添加1000条数据,若有一次插入1000条以上需求,需另辟蹊径。

原生批量插入样例如下:

package com.softscenene.server.drugPurchase.domain.hospLedger.flowMeter;

@Slf4j
@Service
public class FlowMeterService extends BasicService {

    @Resource
    private FlowMeterMapper flowMeterMapper;

    public boolean batchSave(ArrayList arrayList){
        return batchSave(arrayList);
    }
}
方案二,基于mybatisPlus自定义SQL语句(支持一千条以上,xml文件) 方案三,基于mybatisPlus的批量插入(性能最优,但需配置)。

前两种方法配置简单,但面对数十万数据时,性能低下,此处详细介绍第三中方案。

@Mapper
public interface FlowMeterMapper extends BaseMapper {
    
    Integer insertBatchSomeColumn(Collection entityList);
}
@Configuration
@EnableTransactionManagement //开启mybatis事物管理
public class MPConfiguration {
    @Bean
    @Primary//批量插入配置
    public EasySqlInjector easySqlInjector() {
        return new EasySqlInjector();
    }
}
public class EasySqlInjector extends DefaultSqlInjector {
    @Override
    public List getMethodList(Class mapperClass, TableInfo tableInfo) {
        List methodList=super.getMethodList(mapperClass, tableInfo);
        methodList.add(new InsertBatchSomeColumn());//添加批量插入方法
        return methodList;
    }
}
    
    @SneakyThrows(Exception.class)
    @Transactional
    public void asyncSaveFlowMeter(List flowMeters,String batchSign) {
        log.info("日金额——异步保存流水——将保存流水条数:{},批次标记:{}",flowMeters.size(),batchSign);
        Integer saveCount=flowMeterMapper.insertBatchSomeColumn(flowMeters);
        if(saveCount<0){
            log.error("日金额——异步保存流水——保存失败,失败数据为:{},批次标记:{}",flowMeters,batchSign);
            return;
        }
        log.info("日金额——异步保存流水——保存成功,成功条数:{},批次标记:{}",saveCount,batchSign);
        flowMeters.clear();
    }

注意:第三种方案只支持mysql,且在连接时,需添加批量写入参数,完整mysql连接如下【jdbc:mysql://127.0.0.1:3306/drug?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false&autoReconnect=true&rewriteBatchedStatements=true】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/993085.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号