项目使用的jeecgboot开源框架,里面的autopoi用起来很方便,不方便的是导出的记录是通过类的一系列定义来的,比如导出哪些字段,字段名称是什么,在导出过程中,还要根据字典的字典定义取值,数据量大的时候就出错了,实际使用中,导出一万多条学生记录,学生对象定义中有不到十个字典定义,结果导出一直超时,并且因为是主子表的设计,导出内容不够灵活,需要能让用户选择导出的字段,因此自定义了查询sql,得到mapList,定义了一个ExcelView,把这个map集合传进去。
public class ExcelView extends MiniAbstractExcelView {
public ExcelView(){
}
@Override
protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
String codedFileName = "临时文件";
Workbook workbook = null;
String[] exportFields = null;
Object exportFieldStr = model.get("exportFields");
if (exportFieldStr != null && exportFieldStr != "") {
exportFields = exportFieldStr.toString().split(",");
}
if (model.containsKey("mapList")) {
List<ExcelExportEntity> list = (List)model.get("mapList"); //maplist 做字段映射用
if (list.size() == 0) {
throw new RuntimeException("MAP_LIST IS NULL");
}
workbook = ExcelExportUtil.exportExcel((ExportParams) model.get("params"), list, (Collection) model.get("data"));
}
if (model.containsKey(

该博客介绍了如何在JeecgBoot框架下,针对AutoPoi导出大量数据导致的性能问题进行优化。作者通过自定义查询SQL和ExcelView类,实现了按需导出字段和处理字典值的功能,解决了导出超时的问题。同时,文章展示了控制器中的实现代码,以及前端调用接口下载Excel的示例。

2564

被折叠的 条评论
为什么被折叠?



