package com.lxzn.base.service.impl; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import org.mybatis.spring.SqlSessionTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; import org.springframework.transaction.support.DefaultTransactionDefinition; import java.util.List; @Service public class DataImportService { @Autowired private PlatformTransactionManager transactionManager; @Autowired private SqlSessionTemplate sqlSessionTemplate; public int batchInsert(List data, Class entityClass) { if (CollectionUtils.isEmpty(data)) return 0; TransactionDefinition txDef = new DefaultTransactionDefinition(); TransactionStatus txStatus = transactionManager.getTransaction(txDef); try { String statement = entityClass.getName() + ".batchInsert"; int batchSize = 1000; int total = 0; for (int i = 0; i < data.size(); i += batchSize) { List subList = data.subList(i, Math.min(i + batchSize, data.size())); total += sqlSessionTemplate.insert(statement, subList); } transactionManager.commit(txStatus); return total; } catch (Exception e) { transactionManager.rollback(txStatus); throw new RuntimeException(e); } } }