SpringBoot整合EasyExcel(3)

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
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();

}

4.5 Service层

//添加课程分类

@Override

public void saveSubject(MultipartFile file, EduSubjectService subjectService) {

try {

写在最后

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

image

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
4.5 Service层

//添加课程分类

@Override

public void saveSubject(MultipartFile file, EduSubjectService subjectService) {

try {

写在最后

还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…

[外链图片转存中…(img-QgQC9GFi-1714757684711)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 10
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值