基于ModelAndView 导出可自定义字段的Map集合

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

项目使用的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(
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值