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

背景

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

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

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

SpringBoot项目集成

依赖集成

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

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
​
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>
复制代码

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

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.11</version>
</dependency>
复制代码

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

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

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.22</version>
</dependency>
复制代码

下面正式开始业务相关代码的编写。如果你想直接获得完整源码,对照源码阅读本篇文章,可在公号「程序新视界」内回“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<Integer> {
​
  private static final String MAN = "男";
  private static final String WOMAN = "女";
​
​
  @Override
  public Class<?> supportJavaTyp
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值