关于SpringBoot项目使用阿里EasyExcel快捷导入Excel文件入库初始化数据的简 ...

打印 上一主题 下一主题

主题 549|帖子 549|积分 1657

一、问题描述

无论新项目还是旧项目,都会出现数据维护、数据初始化等利用,手动录显然很low(领导会骂你),所以一般采用批量导入导出。这里你还在用原始读取excel逐行逐列去读取吗?2024了ok?使用工具是我们cv大家的一向作风,so就学习一下EasyExcel吧。
二、实践步骤

2.1导入maven依赖

  1. <!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
  2. <dependency>
  3.     <groupId>com.alibaba</groupId>
  4.     <artifactId>easyexcel</artifactId>
  5.     <version>3.2.1</version>
  6. </dependency>
复制代码
你可能会问,为什么是这个版本?版本的选择根据你SpringBoot的版本,我这里是2.x

2.2代码实践

2.2.1定义实体映射,也即Excel表头一行跟实体的映射,封装ImportDataListAO

  1. package com.juhe.digital.pojo.ao;
  2. import com.alibaba.excel.annotation.ExcelProperty;
  3. import io.swagger.annotations.ApiModelProperty;
  4. import lombok.Data;
  5. /**
  6. * @author kiki
  7. * @date 2024/7/24
  8. * @description
  9. */
  10. @Data
  11. public class ImportDataListAO {
  12.     @ApiModelProperty(value = "一级分类")
  13.     @ExcelProperty(value = "一级分类",index = 0)
  14.     private String firstClassify;
  15.     @ApiModelProperty(value = "二级分类")
  16.     @ExcelProperty(value = "二级分类",index = 1)
  17.     private String secondClassify;
  18.     @ApiModelProperty(value = "数据资源项")
  19.     @ExcelProperty(value = "数据资源项",index = 2)
  20.     private String dataResourceItem;
  21.     @ApiModelProperty(value = "汇入频率")
  22.     @ExcelProperty(value = "汇入频率",index = 3)
  23.     private String importFrequency;
  24.     @ApiModelProperty(value = "汇入方式")
  25.     @ExcelProperty(value = "汇入方式",index = 4)
  26.     private String importMode;
  27.     @ApiModelProperty(value = "源头部门")
  28.     @ExcelProperty(value = "源头部门",index = 5)
  29.     private String orgName;
  30.     @ApiModelProperty(value = "业务处室")
  31.     @ExcelProperty(value = "业务处室",index = 6)
  32.     private String businessOffice;
  33.     @ApiModelProperty(value = "联系人")
  34.     @ExcelProperty(value = "联系人",index = 7)
  35.     private String relationUser;
  36.     @ApiModelProperty(value = "联系方式")
  37.     @ExcelProperty(value = "联系方式",index = 8)
  38.     private String relationMobile;
  39.     @ApiModelProperty(value = "表")
  40.     @ExcelProperty(value = "表",index = 9)
  41.     private String dataTableName;
  42. }
复制代码
2.2.2定义监听器

  1. package com.juhe.digital.listener;
  2. import com.alibaba.excel.context.AnalysisContext;
  3. import com.alibaba.excel.event.AnalysisEventListener;
  4. import com.alibaba.excel.util.ListUtils;
  5. import com.juhe.digital.pojo.ao.ImportDataListAO;
  6. import com.juhe.digital.service.IDataListInfoService;
  7. import lombok.extern.slf4j.Slf4j;
  8. import java.util.List;
  9. /**
  10. * @author kiki
  11. * @date 2024/7/23
  12. * @description
  13. */
  14. @Slf4j
  15. public class DataListInfoAOListener extends AnalysisEventListener<ImportDataListAO> {
  16.     private static final int BATCH_COUNT = 5;
  17.     private IDataListInfoService dataListInfoService;
  18.     private List<ImportDataListAO> cachedDataList = ListUtils.newArrayListWithCapacity(BATCH_COUNT);
  19.     public DataListInfoAOListener(IDataListInfoService dataListInfoService) {
  20.         this.dataListInfoService = dataListInfoService;
  21.     }
  22.     /**
  23.      * 这个每一条数据解析都会来调用
  24.      * @param ao
  25.      * @param analysisContext
  26.      */
  27.     @Override
  28.     public void invoke(ImportDataListAO ao, AnalysisContext analysisContext) {
  29.         cachedDataList.add(ao);
  30.         if (cachedDataList.size() >= BATCH_COUNT) {
  31.             saveData();
  32.             // 存储完成清理 list
  33.             cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
  34.         }
  35.     }
  36.     @Override
  37.     public void doAfterAllAnalysed(AnalysisContext analysisContext) {
  38.         saveData();
  39.     }
  40.     private void saveData() {
  41.         log.info("{}条数据,开始存储数据库!", cachedDataList.size());
  42.         dataListInfoService.saveImportDataListInfo(cachedDataList);
  43.         log.info("存储数据库成功!");
  44.     }
  45. }
复制代码
以上准备好后,写一下简单的controller就可以了
2.2.3 FileController

  1.         @PostMapping(value = "/import/data-resource-item")
  2.     public CommonResult importDataResourceItem(@RequestPart("file") @NotEmpty(message = "文件不可为空") MultipartFile file) {
  3.         if (file == null) {
  4.             throw new BusinessException("文件不可为空");
  5.         }
  6.         String fileName = file.getOriginalFilename();
  7.         if (!fileName.endsWith(".xls") && !fileName.endsWith("xlsx")) {
  8.             throw new BusinessException("不支持的文件格式");
  9.         }
  10.         return fileService.importDataResourceItem(file);
  11.     }
  12. //IFileService
  13.     CommonResult importDataResourceItem(MultipartFile file);
  14. //FileServiceImpl
  15.         @Override
  16.     public CommonResult importDataResourceItem(MultipartFile file) {
  17.         try {
  18.             EasyExcel
  19.                     .read(file.getInputStream(), ImportDataListAO.class,new DataListInfoAOListener(dataListInfoService))
  20.                     .sheet()
  21.                     .doRead();
  22.         } catch (IOException e) {
  23.             e.printStackTrace();
  24.         }
  25.         return CommonResult.success();
  26.     }
复制代码
以上就是EasyExcel在SpringBoot项目中实现Excel文件导入数据入库的基本利用了,Say Bye!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表