如果想要分隔成1000条插入一次,需要怎么改造
时间: 2024-02-03 10:02:13 浏览: 23
如果想要将一万条记录分成 1000 条一组,每组插入一次数据库,可以对上述两种方式进行改造,具体实现如下:
1. 使用JdbcTemplate分批次插入数据
```java
final List<SysOperateLog> sysOperateLogs = new ArrayList<>();
for (SysOperaDTO sysOperaDTO : addDTO) {
SysOperateLog sysOperateLog = new SysOperateLog();
BeanUtils.copyProperties(sysOperaDTO, sysOperateLog);
String uid = UUID.randomUUID().toString();
sysOperateLog.setOperId(uid);
sysOperateLog.setOperTime(new Date());
sysOperateLogs.add(sysOperateLog);
}
final int batchSize = 1000;
int size = sysOperateLogs.size();
for (int i = 0; i < size; i += batchSize) {
final List<SysOperateLog> subList = sysOperateLogs.subList(i, Math.min(i + batchSize, size));
jdbcTemplate.batchUpdate("insert into sys_operate_log (id, oper_user, oper_ip, oper_type, oper_time) values (?, ?, ?, ?, ?)",
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int j) throws SQLException {
SysOperateLog sysOperateLog = subList.get(j);
ps.setString(1, sysOperateLog.getId());
ps.setString(2, sysOperateLog.getOperUser());
ps.setString(3, sysOperateLog.getOperIp());
ps.setString(4, sysOperateLog.getOperType());
ps.setTimestamp(5, new Timestamp(sysOperateLog.getOperTime().getTime()));
}
@Override
public int getBatchSize() {
return subList.size();
}
});
}
```
2. 使用MyBatis分批次插入数据
```java
final List<SysOperateLog> sysOperateLogs = new ArrayList<>();
for (SysOperaDTO sysOperaDTO : addDTO) {
SysOperateLog sysOperateLog = new SysOperateLog();
BeanUtils.copyProperties(sysOperaDTO, sysOperateLog);
String uid = UUID.randomUUID().toString();
sysOperateLog.setOperId(uid);
sysOperateLog.setOperTime(new Date());
sysOperateLogs.add(sysOperateLog);
}
final int batchSize = 1000;
int size = sysOperateLogs.size();
for (int i = 0; i < size; i += batchSize) {
final List<SysOperateLog> subList = sysOperateLogs.subList(i, Math.min(i + batchSize, size));
sqlSessionTemplate.execute(new SqlSessionCallback<Void>() {
@Override
public Void doInSqlSession(SqlSession sqlSession) {
SysOperateLogMapper mapper = sqlSession.getMapper(SysOperateLogMapper.class);
mapper.batchInsert(subList);
return null;
}
});
}
```
这样就可以将一万条记录分成 1000 条一组,每组插入一次数据库。需要注意的是,如果数据量过大,可能会导致内存溢出,这时候可以考虑将数据写入文件或者使用分页查询的方式分批次读取数据。