丽水公司做网站,办公室装修设计效果图,西安百度提升优化,北海购物网站开发设计本文使用easypoi实现百万级数据导出 文章目录 前言一、一般情况下导出二、解决思路三、实现步骤导入依赖重写方法调用实现 结束 前言
下文实现了通过easypoi实现将百万级数据导出
一、一般情况下导出
一般导出流程#xff08;简单导出#xff09;#xff1a;
创建对应的… 本文使用easypoi实现百万级数据导出 文章目录 前言一、一般情况下导出二、解决思路三、实现步骤导入依赖重写方法调用实现 结束 前言
下文实现了通过easypoi实现将百万级数据导出
一、一般情况下导出
一般导出流程简单导出
创建对应的实体类使用easypoieasyexcel这种数据库查询对应的数据通过API封装方法进行导出
可能导致问题 如果数据库导出数据量大的情况下 1、数据库查询耗时 2、内存溢出将所有数据全部查询出来会占用大量内存空间 二、解决思路
1、数据分页获取 2、迭代式数据导出通过第一步分页获取的数据分批次去写入excel
三、实现步骤
注意以下实现 Mapper就不展示了就一个普通查询
导入依赖
dependencygroupIdcn.afterturn/groupIdartifactIdeasypoi-web/artifactIdversion4.4.0/version/dependency重写方法
重写IExcelExportServer的selectListForExcelExport()方法 1、创建一个自己的类用于实现IExcelExportServer接口实现我们自己的分页查询数据方法
Slf4j
Service
public class EnExportServiceImpl implements IExcelExportServer {Autowiredprivate EnTestMapper enTestMapper;/*** 实现IEnTestService接口重写selectListForExcelExport方法源码中会循环调用该方法去写入* param queryParams查询入参* param pageNo当前页* return*/Overridepublic ListObject selectListForExcelExport(Object queryParams, int pageNo) {EnTestSearchFom searchFom (EnTestSearchFom) queryParams;//定义分页条数每次只查询指定条数防止内存溢出Page page new Page(pageNo,100000);//使用mybatis-plus分页插件分页此处就是一个普通分页查询IPageEnTest iPage enTestMapper.pageList(page, searchFom);List records iPage.getRecords();log.info(当前页{},pageNo);return records;}
}以上其实最关键的方法已经实现了后续只需要调用easypoi提供的大数据导出即可。
调用实现
public class ChartsController {//我们重写的类Autowiredprivate EnExportServiceImpl enExportServiceImpl;GetMapping(/export)public void export(HttpServletRequest request, HttpServletResponse response){ExportParams exportParams new ExportParams(null,测试, ExcelType.XSSF);//selectListForExcelExport方法中的Object queryParams参数EnTestSearchFom searchFom new EnTestSearchFom();Workbook workbook ExcelExportUtil.exportBigExcel(exportParams, EnTest.class, enExportServiceImpl, searchFom);responseWorkbook(response,workbook,导出数据.xlsx);}/*** 导出 Excel** param response* param workbook* param fileName*/private static void responseWorkbook(HttpServletResponse response, Workbook workbook, String fileName) {try {response.setHeader(Content-disposition, attachment; filename*utf-8 URLEncoder.encode(fileName, UTF-8));response.setContentType(application/octet-stream; charsetUTF-8);workbook.write(response.getOutputStream());workbook.close();} catch (IOException e) {throw new RuntimeException(e);}}}结束