当前位置: 首页 > news >正文

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

一、问题描述

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

二、实践步骤

2.1导入maven依赖

<!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel -->
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.2.1</version>
</dependency>

你可能会问,为什么是这个版本?版本的选择根据你SpringBoot的版本,我这里是2.x
在这里插入图片描述

2.2代码实践

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

package com.juhe.digital.pojo.ao;import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;/*** @author kiki* @date 2024/7/24* @description*/
@Data
public class ImportDataListAO {@ApiModelProperty(value = "一级分类")@ExcelProperty(value = "一级分类",index = 0)private String firstClassify;@ApiModelProperty(value = "二级分类")@ExcelProperty(value = "二级分类",index = 1)private String secondClassify;@ApiModelProperty(value = "数据资源项")@ExcelProperty(value = "数据资源项",index = 2)private String dataResourceItem;@ApiModelProperty(value = "汇入频率")@ExcelProperty(value = "汇入频率",index = 3)private String importFrequency;@ApiModelProperty(value = "汇入方式")@ExcelProperty(value = "汇入方式",index = 4)private String importMode;@ApiModelProperty(value = "源头部门")@ExcelProperty(value = "源头部门",index = 5)private String orgName;@ApiModelProperty(value = "业务处室")@ExcelProperty(value = "业务处室",index = 6)private String businessOffice;@ApiModelProperty(value = "联系人")@ExcelProperty(value = "联系人",index = 7)private String relationUser;@ApiModelProperty(value = "联系方式")@ExcelProperty(value = "联系方式",index = 8)private String relationMobile;@ApiModelProperty(value = "表")@ExcelProperty(value = "表",index = 9)private String dataTableName;}

2.2.2定义监听器

package com.juhe.digital.listener;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.util.ListUtils;
import com.juhe.digital.pojo.ao.ImportDataListAO;
import com.juhe.digital.service.IDataListInfoService;
import lombok.extern.slf4j.Slf4j;import java.util.List;/*** @author kiki* @date 2024/7/23* @description*/
@Slf4j
public class DataListInfoAOListener extends AnalysisEventListener<ImportDataListAO> {private static final int BATCH_COUNT = 5;private IDataListInfoService dataListInfoService;private List<ImportDataListAO> cachedDataList = ListUtils.newArrayListWithCapacity(BATCH_COUNT);public DataListInfoAOListener(IDataListInfoService dataListInfoService) {this.dataListInfoService = dataListInfoService;}/*** 这个每一条数据解析都会来调用* @param ao* @param analysisContext*/@Overridepublic void invoke(ImportDataListAO ao, AnalysisContext analysisContext) {cachedDataList.add(ao);if (cachedDataList.size() >= BATCH_COUNT) {saveData();// 存储完成清理 listcachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);}}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {saveData();}private void saveData() {log.info("{}条数据,开始存储数据库!", cachedDataList.size());dataListInfoService.saveImportDataListInfo(cachedDataList);log.info("存储数据库成功!");}
}

以上准备好后,写一下简单的controller就可以了

2.2.3 FileController

	@PostMapping(value = "/import/data-resource-item")public CommonResult importDataResourceItem(@RequestPart("file") @NotEmpty(message = "文件不可为空") MultipartFile file) {if (file == null) {throw new BusinessException("文件不可为空");}String fileName = file.getOriginalFilename();if (!fileName.endsWith(".xls") && !fileName.endsWith("xlsx")) {throw new BusinessException("不支持的文件格式");}return fileService.importDataResourceItem(file);}//IFileService CommonResult importDataResourceItem(MultipartFile file);
//FileServiceImpl@Overridepublic CommonResult importDataResourceItem(MultipartFile file) {try {EasyExcel.read(file.getInputStream(), ImportDataListAO.class,new DataListInfoAOListener(dataListInfoService)).sheet().doRead();} catch (IOException e) {e.printStackTrace();}return CommonResult.success();}

以上就是EasyExcel在SpringBoot项目中实现Excel文件导入数据入库的基本操作了,Say Bye!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • djiango-开始创建一个应用
  • JavaScript基础入门:构建动态Web世界的基石
  • Kylin Cube构建日志分析:洞察大数据构建过程的窗口
  • SpringBoot 调用外部接口的三种方式
  • C++ 类型转换 包括C风格的转换、static_cast、const_cast、reinterpret_cast、dynamic_cast、模板特化等
  • opencv - py_calib3d - py_calibration 相机校准
  • git是什么?git和svn的区别。git的一些命令
  • 杰发科技Bootloader(2)—— 基于7840的Keil配置地址
  • Redis的五种数据类型与命令
  • 【教程】Node.js+Apache 部署网页全过程(非常详细!)
  • Knowledge Editing for Large Language Models: A Survey
  • 通信原理-思科实验三:无线局域网实验
  • 【使用 Pytest 记录日志文件并确保测试用例正常执行】
  • python实现盲反卷积算法
  • 2024最新网络安全自学路线,内容涵盖3-5年技能提升
  • 【EOS】Cleos基础
  • Docker 笔记(2):Dockerfile
  • EOS是什么
  • java8-模拟hadoop
  • Java精华积累:初学者都应该搞懂的问题
  • LeetCode29.两数相除 JavaScript
  • Linux下的乱码问题
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • rc-form之最单纯情况
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 记一次删除Git记录中的大文件的过程
  • 人脸识别最新开发经验demo
  • 王永庆:技术创新改变教育未来
  • 为什么要用IPython/Jupyter?
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 小程序button引导用户授权
  • 一起参Ember.js讨论、问答社区。
  • 用jquery写贪吃蛇
  • 云大使推广中的常见热门问题
  • 扩展资源服务器解决oauth2 性能瓶颈
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (function(){})()的分步解析
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (二)c52学习之旅-简单了解单片机
  • (剑指Offer)面试题34:丑数
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (论文阅读30/100)Convolutional Pose Machines
  • (一)RocketMQ初步认识
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NetCore项目nginx发布
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net项目IIS、VS 附加进程调试
  • .NET与 java通用的3DES加密解密方法
  • /var/log/cvslog 太大
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945