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 <T> int batchInsert(List<T> data, Class<T> 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<T> 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);
|
}
|
}
|
}
|