关于如何在Springboot项目中通过excel批量导入数据

接口文档

2.5 批量导入学生账号

2.5.1 基本信息

请求路径:/admin/students/batch-import

请求方式:POST

接口描述:通过上传Excel文件批量导入学生账号信息。

2.5.2 请求参数

参数格式:multipart/form-data

参数说明:

参数名称 参数类型 是否必须 备注
file file 包含学生信息的Excel文件。列应对应学生信息字段,如准考证号、姓名、学校等。
2.5.3 响应数据

参数格式:application/json

参数说明:

参数名 类型 是否必须 备注
code number 必须 响应码,1 代表成功,0 代表失败
msg string 非必须 提示信息
data object 非必须 返回的导入结果统计
|- successCount number 非必须 成功导入的数量
|- failureCount number 非必须 失败导入的数量
|- errors array 非必须 导入失败的记录及原因列表(可选)

响应数据样例:

{
   
    "code": 1,
    "msg": "部分导入成功",
    "data": {
   
        "successCount": 98,
        "failureCount": 2,
        "errors": [
            {
    "rowNumber": 5, "examCard": "INVALID_EXAM_CARD", "reason": "准考证号格式错误" },
            {
    "rowNumber": 20, "examCard": "DUPLICATE_EXAM_CARD", "reason": "准考证号已存在" }
        ]
    }
}

具体实现

1.导入依赖

首先在项目的maven仓库中引入poi 相关依赖:

      <!-- poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.16</version>
        </dependency>
        <!-- poi-ooxml-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.16</version>
        </dependency>

2.批量导入学生账号接口

    /**
     * 批量导入学生账号
     * @param file Excel文件
     * @return 导入结果
     */
    @PostMapping(value = "/students/batch-import")
    @ApiOperation("批量导入学生账号")
    public Result<BatchImportResultVO> batchImportStudents(
            @ApiParam(value = "包含学生信息的Excel文件", required = true)
            @RequestPart("file") MultipartFile file) {
   
        BatchImportResultVO importResult = studentService.batchImportStudents(file);
        
        String message = "导入处理完成.";
        if (importResult.getFailureCount() > 0 && importResult.getSuccessCount() > 0) {
   
            message = "部分导入成功.";
        }
        else if (importResult.getFailureCount() > 0 && importResult.getSuccessCount() == 0) {
   
            message = "导入失败.";
        }
        else if (importResult.getFailureCount() == 0 && importResult.getSuccessCount() > 0) {
   
            message = "全部导入成功.";
        } else if (importResult.getSuccessCount() == 0 && importResult.getFailureCount() == 0) {
   
             message = "未导入任何数据或文件内容为空."; // More specific for no data processed
        }
        // Corrected order: data first, then message
        return Result.success(importResult, message)
### 使用 Spring Boot 实现批量导入 Excel 数据 为了实现批量导入 Excel 文件,在 Spring Boot 中可以借助 EasyExcel 库简化操作流程。此库能够高效处理大量数据而不会占用过多内存。 #### 添加 Maven 依赖 在 `pom.xml` 文件中加入如下依赖项以便引入所需工具包[^4]: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.1.2</version> </dependency> ``` #### 创建实体类映射表格结构 假设有一个简单的用户表单,那么对应的 Java 类可能像这样定义: ```java import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; @Data public class User { @ExcelProperty("姓名") private String name; @ExcelProperty("年龄") private Integer age; } ``` #### 编写监听器逻辑 创建一个继承自 `AnalysisEventListener<T>` 的类用于接收解析后的每一行记录并执行业务逻辑: ```java import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import java.util.ArrayList; import java.util.List; public class UserDataListener extends AnalysisEventListener<User> { private final List<User> userList = new ArrayList<>(); @Override public void invoke(User user, AnalysisContext context) { // 处理每一条数据 System.out.println(user); this.userList.add(user); } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 所有数据解析完成之后的操作 System.out.println("所有数据解析完成!"); } } ``` #### 构建控制器接口 最后一步是在 RESTful API 层面提供上传文件的功能入口点,并调用之前编写的处理器来进行具体的数据入库工作: ```java import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @PostMapping("/upload") public String handleFileUpload(@RequestParam("file") MultipartFile file){ try{ // 调用 EasyExcel 提供的方法读取 Excel 并传入监听器实例 EasyExcel.read(file.getInputStream(), User.class, new UserDataListener()).sheet().doRead(); return "成功"; }catch(Exception e){ e.printStackTrace(); return "失败:" + e.getMessage(); } } } ``` 以上就是利用 Spring Boot 结合 EasyExcel 完成批量导入 Excel 表格到数据库的整体方案概述[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值