void selectStream(Vo vo,ResultHandler<Vo> resultHandler);
mapper.java代码
<select id="selectStream" resultMap="VoResult" resultSetType="FORWARD_ONLY" fetchSize="-2147483648">
select * from table1
</select>
mapper.xml代码 resultSetType="FORWARD_ONLY" fetchSize="-2147483648" 额外添加的 详情参考这个
https://orchidflower.gitee.io/2018/06/15/Solving-OutOfMemoryException-Happened-when-Exporting-Excel-using-POI-in-Spring-Part2/
导出excel代码使用easyexcel
response.setCharacterEncoding("utf8");
response.setContentType("application/vnd.ms-excel;charset=utf-8");
String fileName = URLEncoder.encode("test.xlsx", "UTF-8");
//文件名
response.setHeader("Content-Disposition", "attachment; filename=" + fileName );
response.setHeader("Cache-Control", "no-store");
response.addHeader("Cache-Control", "max-age=0");
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), Vo.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("sheet").build();
tEquInfoMapper.selectStream(vo, resultContext -> {
Vo vo = resultContext.getResultObject();
try{
List<Vo> list = new ArrayList<>();
list.add(vo);
excelWriter.write(list, writeSheet);
}catch (Exception e){
e.printStackTrace();
}
});
excelWriter.finish();
ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream(), Vo.class).build();
WriteSheet writeSheet = EasyExcel.writerSheet("sheet").build();
需要获取一个新的WriteSheet对象 不能从EasyExcel.write(response.getOutputStream(), Vo.class).sheet("test").build()获取,不然导出的个空的excel。
excelWriter.write一直写数据,最后执行finish进行响应