springboot使用使用poi生成excel(使用反射获取数据pojo属性)

本文介绍了一个后端使用Spring Boot结合反射和Apache POI库生成Excel的解决方案,以解决前端大量数据查询下载性能问题。通过反射获取POJO属性,匹配导出字段,生成Excel文件流直接返回给前端。内容包括依赖引入、工具类、Service接口与实现、Controller处理及Postman调试方法。注意Mybatis-Plus分页默认限制,需设置size为-1导出全部数据。
摘要由CSDN通过智能技术生成

springboot使用使用poi生成excel(使用反射获取数据pojo属性)

业务场景

系统导出数据较多,由前端查询后进行导出下载存在性能问题,故后端进行数据查询后生成excel,前端直接调用导出接口进行下载。考虑到通用性(不同业务场景下导出数据不同),使用反射获取传输数据的pojo属性,并匹配传入参数中需导出字段输出excel文件流。

依赖

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

Excel生成工具类

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;

import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.*;

/**
 * excel下载工具类
 *
 * @author wangyutian
 * @version 2.0
 * @date 2021/10/18
 */
@Slf4j
public class ExcelDownloadUtil {
   
    /**
     * excel下载
     *
     * <p>1.将传入数据导出excle存储到临时文件
     * <p>2.返回临时文件流
     *
     * @param list          需下载数据
     * @param columns       excel中展示字段
     * @param columnHeaders excel表头,与excel中展示字段顺序对应
     * @return byte[]
     * @author yutian
     * @date 2021/10/18
     */
    public byte[] excelDownload(List<?> list, List<String> columns, List<String> columnHeaders) throws Exception {
   
        // 初始化返回字节数组
        byte[] fileData = new byte[0];

        // 传入参数为空,直接返回空的流
        if (list == null || list.size() == 0) {
   
            log.info("传入数据列表为空");
            return fileData;
        }
        if (columns == null || columns.size() == 0) {
   
            log.in
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值