SpringBoot整合EasyExcel

  • 3.使用EasyExcel实现读

    • 3.1 创建读取操作的监听器
  • 3.2 测试读Excel

  • 4.springboot项目实践EasyExcel

    • 4.1 pom中引入相关依赖
  • 4.2 创建数据库表及添加数据

  • 4.3 实体类

  • 4.4 Controller层

  • 4.5 Service层

  • 4.6 创建监听器(核心部分)

  • 4.7 结果展示

SpringBoot整合EasyExcel

==============================================================================

1.EasyExcel简介


  • Java领域解析、生成Excel比较有名的框架有Apache poi、jxl等。但他们都存在一个严重的问题就是非常的耗内存。如果你的系统并发量不大的话可能还行,但是一旦并发上来后一定会OOM或 者JVM频繁的full gc。

  • EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一 行行读取数据,逐个解析。

  • EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理 (AnalysisEventListener)

2.使用EasyExcel实现写


2.1 创建实体类

创建与Excel对应的实体类

/**

  • @author xppll

  • @date 2021/12/3 10:05

*/

@Data

public class DemoData {

//设置excel表头名称,index表示对应的第几列

@ExcelProperty(value = “学生编号”,index = 0)

private Integer sno;

@ExcelProperty(value = “学生姓名”,index = 1)

private String sname;

}

ExcelProperty:指定当前字段对应excel中的那一列。可以根据名字或者Index去匹配。当然也可以不写,默认第一个字段就是index=0,以此类推。

2.2 测试写Excel

/**

  • @author xppll

  • @date 2021/12/3 10:08

*/

public class TestWriteExcel {

public static void main(String[] args) {

//实现excel写的操作

//1.设置写入文件夹的地址和excel文件名称

String fileName = “D:\write.xlsx”;

//2.调用easyexcel里面方法实现写操作

//传入:文件存放的路径+对应的实体类class

EasyExcel.write(fileName, DemoData.class).sheet(“学生列表”).doWrite(getData());

}

//创建方法返回list集合(测试数据)

private static List getData() {

List list = new ArrayList<>();

for (int i = 0; i < 10; i++) {

DemoData data = new DemoData();

data.setSno(i);

data.setSname(“lucy” + i);

list.add(data);

}

return list;

}

}

结果如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R51xa0VB-1638630992973)(SpringBoot项目整合EasyExcel.assets/image-20211203105225367.png)]

3.使用EasyExcel实现读


3.1 创建读取操作的监听器

/**

  • @author xppll

  • @date 2021/12/3 10:29

*/

public class ExcelListener extends AnalysisEventListener {

/**

  • 一行一行读取Excel中的内容

  • @param data

  • @param analysisContext

*/

@Override

public void invoke(DemoData data, AnalysisContext analysisContext) {

System.out.println(“****” + data);

}

/**

  • 读取表头

  • @param headMap

  • @param context

*/

@Override

public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {

System.out.println(“表头:”+headMap);

}

/**

  • 读取完成之后做的事

  • @param analysisContext

*/

@Override

public void doAfterAllAnalysed(AnalysisContext analysisContext) {

}

}

3.2 测试读Excel

/**

  • @author xppll

  • @date 2021/12/3 10:35

*/

public class TestReadExcel {

public static void main(String[] args) {

//读取文件的路径

String fileName = “D:\write.xlsx”;

//传入三个参数:文件路径+封装的类的class+监听器

EasyExcel.read(fileName, DemoData.class,new ExcelListener())

.sheet()

.doRead();

}

}

控制台输出如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ugT2UNpq-1638630992975)(SpringBoot项目整合EasyExcel.assets/image-20211203105451947.png)]

4.springboot项目实践EasyExcel


通过在后台管理上传excel文件添加课程分类(一共两级分类)

4.1 pom中引入相关依赖

com.alibaba

easyexcel

3.0.5

4.2 创建数据库表及添加数据

这里创建一个课程表用EasyExcel实现课程的分类

CREATE TABLE edu_subject (

id char(19) NOT NULL COMMENT ‘课程类别ID’,

title varchar(10) NOT NULL COMMENT ‘类别名称’,

parent_id char(19) NOT NULL DEFAULT ‘0’ COMMENT ‘父ID’,

sort int(10) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘排序字段’,

gmt_create datetime NOT NULL COMMENT ‘创建时间’,

gmt_modified datetime NOT NULL COMMENT ‘更新时间’,

PRIMARY KEY (id),

KEY idx_parent_id (parent_id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT=‘课程科目’;

INSERT INTO edu_subject VALUES (‘1178214681118568449’,‘后端开发’,‘0’,1,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681139539969’,‘Java’,‘1178214681118568449’,1,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681181483010’,‘前端开发’,‘0’,3,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681210843137’,‘JavaScript’,‘1178214681181483010’,4,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681231814658’,‘云计算’,‘0’,5,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681252786178’,‘Docker’,‘1178214681231814658’,5,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681294729217’,‘Linux’,‘1178214681231814658’,6,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681324089345’,‘系统/运维’,‘0’,7,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681353449473’,‘Linux’,‘1178214681324089345’,7,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681382809602’,‘Windows’,‘1178214681324089345’,8,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681399586817’,‘数据库’,‘0’,9,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681428946945’,‘MySQL’,‘1178214681399586817’,9,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681454112770’,‘MongoDB’,‘1178214681399586817’,10,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681483472898’,‘大数据’,‘0’,11,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681504444418’,‘Hadoop’,‘1178214681483472898’,11,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681529610242’,‘Spark’,‘1178214681483472898’,12,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681554776066’,‘人工智能’,‘0’,13,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681584136193’,‘Python’,‘1178214681554776066’,13,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681613496321’,‘编程语言’,‘0’,14,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178214681626079234’,‘Java’,‘1178214681613496321’,14,‘2019-09-29 15:47:25’,‘2019-09-29 15:47:25’),(‘1178585108407984130’,‘Python’,‘1178214681118568449’,2,‘2019-09-30 16:19:22’,‘2019-09-30 16:19:22’),(‘1178585108454121473’,‘HTML/CSS’,‘1178214681181483010’,3,‘2019-09-30 16:19:22’,‘2019-09-30 16:19:22’);

4.3 实体类

@Data

public class SubjectData {

@ExcelProperty(index = 0)

private String oneSubjectName;

@ExcelProperty(index = 1)

private String twoSubjectName;

}

/**

  • 课程科目

  • @author xppll

  • @since 2021-12-03

*/

@Data

@EqualsAndHashCode(callSuper = false)

@Accessors(chain = true)

@ApiModel(value=“EduSubject对象”, description=“课程科目”)

public class EduSubject implements Serializable {

private static final long serialVersionUID = 1L;

@ApiModelProperty(value = “课程类别ID”)

@TableId(value = “id”, type = IdType.ID_WORKER_STR)

private String id;

@ApiModelProperty(value = “类别名称”)

private String title;

@ApiModelProperty(value = “父ID”)

private String parentId;

@ApiModelProperty(value = “排序字段”)

private Integer sort;

@ApiModelProperty(value = “创建时间”)

@TableField(fill = FieldFill.INSERT)

private Date gmtCreate;

@ApiModelProperty(value = “更新时间”)

@TableField(fill = FieldFill.INSERT_UPDATE)

private Date gmtModified;

}

4.4 Controller层

@Autowired

private EduSubjectService subjectService;

//添加课程分类

//获取前端上传过来的excel文件,把文件内容读取出来保存到数据库

@PostMapping(“addSubject”)

public R addSubject(MultipartFile file){

subjectService.saveSubject(file,subjectService);

return R.ok();

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-VmkXsIx1-1715075084400)]

[外链图片转存中…(img-Pu5xzPsR-1715075084401)]

[外链图片转存中…(img-uPHGdHCj-1715075084401)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot整合EasyExcel可以使得我们在使用Java编程语言操作Excel文件时更加方便快捷,无需手动处理Excel的复杂格式和数据类型转换问题。下面是一个简单的示例: 1. 引入EasyExcel依赖 在pom.xml文件中添加以下依赖: ```xml <!-- EasyExcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> ``` 2. 创建Excel模板类 ```java @Data public class ExcelData { @ExcelProperty(value = "姓名", index = 0) private String name; @ExcelProperty(value = "年龄", index = 1) private Integer age; @ExcelProperty(value = "性别", index = 2) private String gender; } ``` 3. 编写Excel读取代码 ```java @Service public class ExcelService { public List<ExcelData> readExcel(MultipartFile file) throws IOException { InputStream inputStream = file.getInputStream(); List<ExcelData> list = new ArrayList<>(); ExcelReader reader = new ExcelReader(inputStream, ExcelTypeEnum.XLSX, null, new AnalysisEventListener<ExcelData>() { @Override public void invoke(ExcelData data, AnalysisContext context) { list.add(data); } @Override public void doAfterAllAnalysed(AnalysisContext context) { } }); reader.read(new Sheet(1, 1, ExcelData.class)); return list; } } ``` 4. 编写Excel导出代码 ```java @Service public class ExcelService { public void writeExcel(HttpServletResponse response, List<ExcelData> list) throws IOException { response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("测试文件.xlsx", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName); EasyExcel.write(response.getOutputStream(), ExcelData.class).sheet("测试").doWrite(list); } } ``` 以上就是Spring Boot整合EasyExcel的基本示例,可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值