第一种方法:
//需要插入的总数量
Integer allNumber =3000;
Integer number = 0;
//每次循环最多生成数量
Integer max = 100;
do {
if (allNumber > max) {
number = max;
allNumber -= max;
} else {
number = allNumber;
allNumber = 0;
}
//todo 执行插入逻辑
List<T> list = new ArrayList<T>();
for (int i = 0; i < number; i++) {
T t = new T();
list.add(t);
}
//执行批量插入sql
int insert = writeMapper.insertList(list);
if (insert != number) {
//如果插入的总数不等于我们插入预期,回滚数据并返回错误信息
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return new JSONResult(500, "请求失败请稍后再试");
}
//allNumber剩余总数小于1时结束循环
} while (allNumber > 1);
第二种方法:
/**
* 经实践,800一批插入相对较快,这个可以随便定义
*/
private static final int MAX_INSERT_NUMBER = 800;
public static void main(String[] args) {
//需要插入的集合
List<T> list = new ArrayList<T>();
//需要插入总数
int allNumber = list.size();
//每次插入数量
int insertNumber = MAX_INSERT_NUMBER;
for (int i = 0; i < allNumber; i += insertNumber) {
//作用为insertNumber最后没有800条数据则剩余几条newList中就装几条
if (i + MAX_INSERT_NUMBER > allNumber) {
insertNumber = allNumber - i;
}
List<T> insertList = list.subList(i, i + insertNumber);
//批量插入
int insert = wirterMapper.insertList(insertList);
if (insert != number) {
//如果插入的总数不等于我们插入预期,回滚数据并返回错误信息
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
return new JSONResult(500, "请求失败请稍后再试");
}
}
}