SpringBoot集成EasyExcel 3.x:高效实现Excel数据的优雅导入与导出
在现代企业应用中,Excel作为数据交换的重要工具,几乎无处不在。如何高效且优雅地实现Excel数据的导入与导出,是每个开发者都需要面对的问题。EasyExcel是阿里巴巴开源的一个高性能Excel处理库,它可以大大简化Excel操作。在本文中,我们将介绍如何在SpringBoot项目中集成EasyExcel 3.x,并实现Excel数据的导入与导出。
一、项目依赖
首先,在SpringBoot项目中引入EasyExcel相关依赖。
```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.x.x</version> </dependency> ```
二、实体类定义
我们以一个简单的用户信息表为例,定义一个User实体类。
```java import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.write.style.ColumnWidth; @ColumnWidth(20) public class User { @ExcelProperty("用户ID") private Long id; @ExcelProperty("用户名") private String name; @ExcelProperty("年龄") private Integer age; // Getters and setters } ```
三、实现Excel导出
导出Excel的核心在于使用EasyExcel提供的`EasyExcel.write()`方法。
3.1 Controller层
```java import com.alibaba.excel.EasyExcel; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; @RestController public class ExcelExportController { @GetMapping("/export") public void export(HttpServletResponse response) throws IOException { // 设置响应头 response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf-8"); String fileName = URLEncoder.encode("用户信息", "UTF-8"); response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); // 模拟数据 List<User> userList = new ArrayList<>(); userList.add(new User(1L, "张三", 25)); userList.add(new User(2L, "李四", 30)); // 写入Excel EasyExcel.write(response.getOutputStream(), User.class).sheet("用户信息").doWrite(userList); } } ```
四、实现Excel导入
导入Excel的核心在于使用EasyExcel提供的`EasyExcel.read()`方法。
4.1 自定义读监听器
```java import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import java.util.ArrayList; import java.util.List; public class UserExcelListener extends AnalysisEventListener<User> { private List<User> userList = new ArrayList<>(); @Override public void invoke(User user, AnalysisContext analysisContext) { userList.add(user); } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { // 可以在这里进行数据处理,例如保存到数据库 System.out.println("所有数据解析完成!"); } public List<User> getUserList() { return userList; } } ```
4.2 Controller层
```java import com.alibaba.excel.EasyExcel; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @RestController public class ExcelImportController { @PostMapping("/import") public String importExcel(@RequestParam("file") MultipartFile file) throws IOException { UserExcelListener listener = new UserExcelListener(); EasyExcel.read(file.getInputStream(), User.class, listener).sheet().doRead(); List<User> userList = listener.getUserList(); // 这里可以将数据保存到数据库 userList.forEach(System.out::println); return "导入成功!"; } } ```
五、完整的SpringBoot配置
5.1 启动类
```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class EasyExcelApplication { public static void main(String[] args) { SpringApplication.run(EasyExcelApplication.class, args); } } ```
5.2 配置文件
在`application.properties`中添加必要的配置:
```properties spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=5MB spring.servlet.multipart.max-request-size=5MB ```
六、测试导入与导出功能
启动SpringBoot应用后,访问以下接口进行测试:
- 导出:`http://localhost:8080/export`
- 导入:通过Postman等工具,发送POST请求到`http://localhost:8080/import`,并上传一个包含用户信息的Excel文件。
结论
通过SpringBoot集成EasyExcel,可以高效地实现Excel数据的导入与导出。EasyExcel提供了简洁的API和优异的性能,适用于各种规模的应用场景。