java实现大数据量导出
实现思路
1.需要快速导出的处理方法
- 快速导出时需要注意execl的版本,不同版本的execl可以容纳的数据量是不同的,个人建议使用07版的execl,可以容纳100w的数据,使用SXSSFWorkbook类进行execl的操作。另外导出时不建议使用list进行多次的传递,使用查多少写入多少的方式。这里只贴核心代码,剩下的整理完后进行补充。
try (SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);) {
StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
Cursor<Student> cursor = studentMapper.selectAllUse();
Iterator<Student> iterator = cursor.iterator();
Row row;
//2为预留的两行字段 -行数记录器
int rowNum = 2;
while (iterator.hasNext()) {
Student student = iterator.next();
rowNum++;
//下标问题怎么处理。
row = sheet.createRow(rowNum);
row.createCell(0).setCellValue(student.getId());
row.createCell(1).setCellValue(student.getAge());
row.createCell(2).setCellValue(student.getName());
}
} catch (Exception e) {
e.printStackTrace();
}
2.对于不需要快速导出的方法
- 这种实现起来最简单,导出时使用线程进行导出,前端使用loding或进度条进行拖延时间,后端等待线程执行完返回线程id,根据id进行返回值的下载,将导出和下载分开,另外在导出时根据数据量进行分execl,导出完进行记得压缩。方法简单,不进行实现