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进行响应

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐