多线程批量拆分 List 导入数据库!

09d9156c299d3ccf5d21d014fbfe7907.png

若有收获,请记得分享和转发哦

一、前言

前两天做了一个导入的功能,导入开始的时候非常慢,导入2w条数据要1分多钟,后来一点一点的优化,从直接把list怼进Mysql中,到分配把list导入Mysql中,到多线程把list导入Mysql中。

时间是一点一点的变少了。非常的爽,最后变成了10s以内。

下面就展示一下过程。

二、直接把list怼进Mysql

使用mybatis的批量导入操作:

@Transactional(rollbackFor = Exception.class)  
public int addFreshStudentsNew2(List<FreshStudentAndStudentModel> list, String schoolNo) {  
    if (list == null || list.isEmpty()) {  
        return 0;  
    }  
    List<StudentEntity> studentEntityList = new LinkedList<>();  
    List<EnrollStudentEntity> enrollStudentEntityList = new LinkedList<>();  
    List<AllusersEntity> allusersEntityList = new LinkedList<>();  
  
    for (FreshStudentAndStudentModel freshStudentAndStudentModel : list) {  
  
        EnrollStudentEntity enrollStudentEntity = new EnrollStudentEntity();  
        StudentEntity studentEntity = new StudentEntity();  
        BeanUtils.copyProperties(freshStudentAndStudentModel, studentEntity);  
        BeanUtils.copyProperties(freshStudentAndStudentModel, enrollStudentEntity);  
        String operator = TenancyContext.UserID.get();  
        String studentId = BaseUuidUtils.base58Uuid();  
        enrollStudentEntity.setId(BaseUuidUtils.base58Uuid());  
        enrollStudentEntity.setStudentId(studentId);  
        enrollStudentEntity.setIdentityCardId(freshStudentAndStudentModel.getIdCard());  
        enrollStudentEntity.setOperator(operator);  
        studentEntity.setId(studentId);  
        studentEntity.setIdentityCardId(freshStudentAndStudentModel.getIdCard());  
        studentEntity.setOperator(operator);  
        studentEntityList.add(studentEntity);  
        enrollStudentEntityList.add(enrollStudentEntity);  
  
        AllusersEntity allusersEntity = new AllusersEntity();  
        allusersEntity.setId(enrollStudentEntity.getId());  
        allusersEntity.setUserCode(enrollStudentEntity.getNemtCode());  
        allusersEntity.setUserName(enrollStudentEntity.getName());  
        allusersEntity.setSchoolNo(schoolNo);  
        allusersEntity.setTelNum(enrollStudentEntity.getTelNum());  
        allusersEntity.setPassword(enrollStudentEntity.getNemtCode());  //密码设置为考生号  
        allusersEntityList.add(allusersEntity);  
    }  
        enResult = enrollStudentDao.insertAll(enrollStudentEntityList);  
        stuResult = studentDao.insertAll(studentEntityList);  
        allResult = allusersFacade.insertUserList(allusersEntityList);  
  
    if (enResult > 0 && stuResult > 0 && allResult) {  
        return 10;  
    }  
    return -10;  
}

87aa5777ce0bb07a55320fc7f948bdc3.png

e349f70d47adf67329d6cbf4ed9a255a.png

0b79fc0ff4a6ca6c1ee514a418582b19.png

ea0e2377d09c8c8c7cc759a44bf64958.png

93c6a7f9f7c716409d77e603b2a13ef7.png

25eac43a9cb49369614b4a1e9ca73e62.png

f8bac8e01a63d1b7eb5d7f2480465f56.png

cd0d380de4ca2b5e57c927f607765a07.png

8892f043d939104eafcac049a1cc492e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值