当addDTO有一万条时,怎么优化下面的代码减轻数据库压力,提高整体性能 for (SysOperaDTO sysOperaDTO : addDTO) { SysOperateLog sysOperateLog = new SysOperateLog(); BeanUtils.copyProperties(sysOperaDTO, sysOperateLog); String uid = UUID.randomUUID().toString(); // 请求的地址 sysOperateLog.setOperId(uid); sysOperateLog.setOperTime(new Date()); operLogService.save(sysOperateLog); }
时间: 2024-02-27 07:56:12 浏览: 69
在这种情况下,插入一万条记录到数据库会给数据库带来很大的压力。为了减轻数据库压力,可以考虑使用批量插入的方式。具体实现可以采用以下两种方式:
1. 使用JdbcTemplate批量插入数据
可以使用Spring框架的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);
}
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 i) throws SQLException {
SysOperateLog sysOperateLog = sysOperateLogs.get(i);
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 sysOperateLogs.size();
}
});
```
2. 使用MyBatis批量插入数据
如果项目中使用了MyBatis框架,可以使用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);
}
sqlSessionTemplate.execute(new SqlSessionCallback<Void>() {
@Override
public Void doInSqlSession(SqlSession sqlSession) {
SysOperateLogMapper mapper = sqlSession.getMapper(SysOperateLogMapper.class);
mapper.batchInsert(sysOperateLogs);
return null;
}
});
```
使用批量插入的方式可以有效减轻数据库压力,提高整体性能。
阅读全文