Spring Boot + EasyExcel导入导出,简直太好用了

背景

老项目主要采用的POI框架来进行Excel数据的导入和导出,但经常会出现OOM的情况,导致整个服务不可用。后续逐步转移到EasyExcel,简直不能太好用了。

EasyExcel是阿里巴巴开源插件之一,主要解决了poi框架使用复杂,sax解析模式不容易操作,数据量大起来容易OOM,解决了POI并发造成的报错。主要解决方式:通过解压文件的方式加载,一行一行地加载,并且抛弃样式字体等不重要的数据,降低内存的占用。

天这篇文章,我们基于SpringBoot来实现一下EasyExcel的集成,更加方便大家在实践中的直接使用。

SpringBoot项目集成

依赖集成

创建一个基础的SpringBoot项目,比如这里采用SpringBoot 2.7.2版本。


  
    org.springframework.boot
    spring-boot-starter-web
  
    org.springframework.boot
    spring-boot-starter-test
    test
  

复制代码

EasyExcel在SpringBoot的集成非常方便,只需引入对应的pom依赖即可。在上述dependencies中添加EasyExcel的依赖:


    com.alibaba
    easyexcel
    2.2.11

复制代码

EasyExcel目前稳定最新版本2.2.11。如果想查看开源项目或最新版本,可在GitHub上获得:github.com/alibaba/eas…。

为了方便和简化代码编写,这里同时引入了Lombok的依赖,后续代码中也会使用对应的注解。


  org.projectlombok
  lombok
  1.18.22

复制代码

下面正式开始业务相关代码的编写。如果你想直接获得完整源码,对照源码阅读本篇文章,可在公号「程序新视界」内回“1007”获得完整源码。

实体类实现

这里创建一个Member,会员的实体类,并在实体类中填写基础的个人信息。

@Data
public class Member {
​
  /**
   * EasyExcel使用:导出时忽略该字段
   */
  @ExcelIgnore
  private Integer id;
​
  @ExcelProperty("用户名")
  @ColumnWidth(20)
  private String username;
​
  /**
   * EasyExcel使用:日期的格式化
   */
  @ColumnWidth(20)
  @ExcelProperty("出生日期")
  @DateTimeFormat("yyyy-MM-dd")
  private Date birthday;
​
  /**
   * EasyExcel使用:自定义转换器
   */
  @ColumnWidth(10)
  @ExcelProperty(value = "性别", converter = GenderConverter.class)
  private Integer gender;
​
}
复制代码

为了尽量多的演示EasyExcel的相关功能,在上述实体类中使用了其常见的一些注解:

  • @ExcelIgnore:忽略掉该字段;
  • @ExcelProperty("用户名"):设置该列的名称为”用户名“;
  • @ColumnWidth(20):设置表格列的宽度为20;
  • @DateTimeFormat("yyyy-MM-dd"):按照指定的格式对日期进行格式化;
  • @ExcelProperty(value = "性别", converter = GenderConverter.class):自定义内容转换器,类似枚举的实现,将“男”、“女”转换成“0”、“1”的数值。

GenderConverter转换器的代码实现如下:

public class GenderConverter implements Converter {
​
  private static final String MAN = "男";
  private static final String WOMAN = "女";
​
​
  @Override
  public Class<

你可能感兴趣的:(java,开发语言)