EasyExcel实现excel导入

article/2025/9/8 18:14:41

文章目录

  • 前言
  • 一、使用步骤
    • 1.添加依赖:
    • 2.创建和实体类对应的用于导入导出的模板类,尽量不要直接使用实体类。
      • 每个字段需添加@ExcelProperty注解,作为导入导出的识别的依据。注意value值是跟excel里的列名保持一致,不是跟数据库里的字段。
    • 3.相关代码
      • Cotroller类:
      • Service类
      • Service实现类
      • dao类
      • mapper.xml
      • 使用到的监听器类
      • 测试接口(使用的postman)
  • 总结


前言

SpringBoot+EasyExcel实现导入

一、使用步骤

1.添加依赖:

代码如下(示例):

<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version>
</dependency>

2.创建和实体类对应的用于导入导出的模板类,尽量不要直接使用实体类。

在这里插入图片描述

每个字段需添加@ExcelProperty注解,作为导入导出的识别的依据。注意value值是跟excel里的列名保持一致,不是跟数据库里的字段。

在这里插入图片描述

3.相关代码

Cotroller类:

/**
* 导入Excel
*/
@RequestMapping("/importExcel")
@ResponseBody
public String importExcel(@RequestParam(value = "file") MultipartFile file) throws IOException{EasyExcel.read(file.getInputStream(), UrbanFacilityManageModel.class, new ExcelListener(urbanFacilityManageService)).sheet().doRead();return "success";
}

Service类

/**
* 一次性存储导入的excel文件
* @param list
*/
void saveList(List<UrbanFacilityManageModel> list);

Service实现类

/**
* 存列表,excel文件
* @param list
*/
@Override
public void saveList(List<UrbanFacilityManageModel> list) {urbanFacilityManageDao.saveList(list);
}

dao类

/**
*excel导入
*/
int saveList(List<UrbanFacilityManageModel> urbanFacilityManageModelList);

mapper.xml

<!--一次性存储导入excel-->
<insert id="saveList" parameterType="java.util.List">insert into urban_facility_manage (facility_code,facility_type,facility_name,specs_message,charge_branch,owner_organ,curing_organ,data_sources,area_code,area_name,grid_code,geo_x,geo_y,position,audit_idea,remark,db_status)values<foreach collection="list" item="item" index="index" separator=",">(#{item.facilityCode},#{item.facilityType},#{item.facilityName},#{item.specsMessage},#{item.chargeBranch},#{item.ownerOrgan},#{item.curingOrgan},#{item.dataSources},#{item.areaCode},#{item.areaName},#{item.gridCode},#{item.geoX},#{item.geoY},#{item.position},#{item.auditIdea},#{item.remark},#{item.dbStatus})</foreach>
</insert>

使用到的监听器类

package com.topevery.pss.utils;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.topevery.pss.facility.po.UrbanFacilityManage;
import com.topevery.pss.facility.po.UrbanFacilityManageModel;
import com.topevery.pss.facility.service.UrbanFacilityManageService;
import java.util.ArrayList;
import java.util.List;// 有个很重要的点 ExcelListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
public class ExcelListener extends AnalysisEventListener<UrbanFacilityManageModel> {private List<UrbanFacilityManageModel> list = new ArrayList<>();/*** 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收*/private static final int BATCH_COUNT = 3000;/*** 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。*/private UrbanFacilityManageService urbanFacilityManageService;/*** 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来*/public ExcelListener(UrbanFacilityManageService urbanFacilityManageService) {this.urbanFacilityManageService = urbanFacilityManageService;}/*** 这个每一条数据解析都会来调用*/@Overridepublic void invoke(UrbanFacilityManageModel urbanFacilityManageModel, AnalysisContext analysisContext) {System.out.println("解析到一条数据:========================"+urbanFacilityManageModel.toString());// 数据存储到datas,供批量处理,或后续自己业务逻辑处理。if(ObjectUtil.isNotEmpty(urbanFacilityManageModel.getFacilityType()) && ObjectUtil.isNotEmpty(urbanFacilityManageModel.getFacilityName()) ) {list.add(urbanFacilityManageModel);}// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOMif(list.size() >= BATCH_COUNT){saveData();// 存储完成清理dataslist.clear();}}/*** 所有数据解析完成了 都会来调用*/@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {saveData();//确保所有数据都能入库}/*** 加上存储数据库*/private void saveData() {System.out.println("=============================="+list.size()+"条数据,开始存储到数据库");urbanFacilityManageService.saveList(list);}
}

测试接口(使用的postman)

在这里插入图片描述

excel测试文件自己提前准备多,多测几次,表格列名需要跟你配置的模板类中保持一致,包括顺序。
在这里插入图片描述

总结

感谢大家的观看,有什么问题大家可以指出


http://chatgpt.dhexx.cn/article/ZSDd8Gqg.shtml

相关文章

Excel表格的导入导出——EasyExcel

参考视频 csdn参考地址 一、导入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version> </dependency>二、实体类 方式一&#xff1a;Excel Property&#xff08;&…

实现Excel的导入、导出

实现Excel的导入、导出 关于excel的操作在工作中经常会遇到&#xff0c;如果只是一次性使用的话&#xff0c;最简单的方式就是通过数据库的可视化工具&#xff08;如Navicat&#xff09;查询结果集之后直接一键生成excel了&#xff0c;当然这只能解燃眉之急&#xff0c;并不是…

EasyExcel复杂excel导入

EasyExcel复杂excel导入 easyexcel官方都是一些简单的导入到处示例&#xff0c;复杂的excel文档导入&#xff0c;还得自己去慢慢琢磨、百度、思考、总结、学习、观察。 代码地址在文档的最后&#xff0c;如果你也遇到这种需求&#xff0c;不妨动动你的小拇指&#xff0c;点个…

导出Excel的方式

*数据是表格的形式&#xff0c;进常用到Excel *在程序中经常可以看到有导出Excel文档&#xff0c;Excel导入数据的情况&#xff0c;现在我就说一下我学到的导出Excel *导出Excel有两种方法&#xff0c;第一种是自己设置表头的&#xff0c;第二种是填充的&#xff0c;现在我说的…

Excel文件导入导出操作

> 注意&#xff01;注意&#xff01;&#xff01;注意&#xff01;&#xff01;&#xff01; 文末有惊喜彩蛋&#xff0c;请注意查收&#xff01;日常开发工作中对于文件的相关操作大家多少都会涉及&#xff1a;上传解析、数据导出等。此篇内容主要分享一下工作中常用的Exce…

Java实现Excel导入导出

一、导入 前言&#xff1a;导入必须用post请求 具体原因在2中叙述 1、Excel导入 总结一下目标&#xff0c;就是要将excel中的数据行、逐一提取&#xff0c;最后得到一个list&#xff0c;这个list的每个元素就是excel的每个数据行的实例&#xff0c;之后的操作就是常规的jav…

Java实现Excel导入

实现前准备&#xff08;导入所需要的依赖&#xff09; <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.22</version></dependency><dependency><groupId>org.apache.…

导入Excel文件的方法

我们在做一些项目的时候通常会遇到有导入文件的这种需求&#xff0c;下面我给大家分享一下导入Excel文件的方法。 首先我们得准备一个模板&#xff0c;下图就是一个简单的EX导入模板&#xff0c; 下图就是一个导入模板&#xff0c; 我们先把导入模板写好&#xff0c; 还有一个…

两种方式导入excel

第一种 easyExcel pom文件导入 com.alibaba easyexcel 2.2.3 然后 /** * 导入用户excel * param * return */ PostMapping(“manage/imporAcc”) Message<?> imporAcc(RequestParam(“accountFile”) MultipartFile file,RequestParam(“role”)String role,Request…

Java实现Excel导入和导出,看这一篇就够了(珍藏版)

目录 目录 前言 1. 功能测试 1.1 测试准备 1.2 数据导入 1.2.1 导入解析为JSON 1.2.2 导入解析为对象&#xff08;基础&#xff09; 1.2.3 导入解析为对象&#xff08;字段自动映射&#xff09; 1.2.4 导入解析为对象&#xff08;获取行号&#xff09; 1.2.5 导入解析…

常见机器学习面试题

参考&#xff1a;http://kubicode.me/2015/08/16/Machine%20Learning/Common-Interview/?fromsinglemessage# http://blog.csdn.NET/heyongluoyao8/article/details/49429629 http://lib.csdn.Net/article/machinelearning/33798 http://www.cnblogs.com/zuochongyan/p/540705…

机器学习面试题60~100

61.说说梯度下降法 LeftNotEasy&#xff0c;本题解析来源&#xff1a;http://www.cnblogs.com/LeftNotEasy/archive/2010/12/05/mathmatic_in_machine_learning_1_regression_and_gradient_descent.html 下面是一个典型的机器学习的过程&#xff0c;首先给出一个输入数据&#…

深度学习机器学习面试题汇——模型优化,轻量化,模型压缩

深度学习机器学习面试题汇——模型优化&#xff0c;轻量化&#xff0c;模型压缩 提示&#xff1a;互联网大厂可能考的面试题 若CNN网络很庞大&#xff0c;在手机上运行效率不高&#xff0c;对应模型压缩方法有了解吗 介绍一下模型压缩常用的方法&#xff1f;为什么用知识蒸馏&…

Python干货:破解40大机器学习面试题(包含初中高级)

机器学习&#xff08;ML&#xff09;是我们世界的未来。在未来的几年中&#xff0c;几乎每种产品都将包含ML组件。ML预计将从2020年的$ 7.3B增长到2024年的$ 30.6B。对ML技能的需求遍及整个行业。 机器学习面试是一个严格的过程&#xff0c;在此过程中&#xff0c;应聘者会评估…

2021机器学习面试必考面试题汇总(附答案详解)

问题&#xff1a;Xgboost、lightGBM和Catboost之间的异同&#xff1f; 树的特征 三种算法基学习器都是决策树&#xff0c;但是树的特征以及生成的过程仍然有很多不同。 CatBoost使用对称树&#xff0c;其节点可以是镜像的。CatBoost基于的树模型其实都是完全二叉树。 XGBoo…

机器学习面试题之——简单介绍最小二乘

1、常用到的最小二乘场合&#xff1a;最小二乘法直线拟合&#xff0c;最小二乘法多项式&#xff08;曲线&#xff09;拟合&#xff0c;机器学习中线性回归的最小二乘法&#xff0c;系统辨识中的最小二乘辨识法&#xff0c;参数估计中的最小二乘法&#xff0c;等等。 2、为什么…

AI人工智能、机器学习 面试题(2022最新版)

人工智能、机器学习面试题总结&#xff0c;侧重于理解&#xff0c;回答供参考&#xff0c;欢迎讨论。 General 深度学习&#xff08;Deep Learning, DL&#xff09;和机器学习&#xff08;Machine Learning, ML&#xff09;的关系是什么&#xff1f; 深度学习是机器学习的子类…

面试官最爱用的统计学、数据科学、机器学习面试题答案

【导读】本文盘点了数据科学和机器学习面试中的常见问题&#xff0c;着眼于不同类型的面试问题。如果您计划向数据科学领域转行&#xff0c;这些问题一定会有所帮助。 技术的不断进步使得数据和信息的产生速度今非昔比&#xff0c;并且呈现出继续增长的趋势。此外&#xff0c;…

41个机器学习面试题

####41 Essential Machine Learning Interview Questions (with answers) <font color‘orange’&#xff0c;size5>一、算法理论 Q1: 什么是偏倚&#xff08;bias&#xff09;、方差&#xff08;variable&#xff09;均衡&#xff1f; 偏倚指的是模型预测值与真实值的…

推荐收藏,25道机器学习面试问题(附答案)

近年来&#xff0c;对深度学习的需求不断增长&#xff0c;其应用程序被应用于各个商业部门。各公司现在都在寻找能够利用深度学习和机器学习技术的专业人士。 在本文中&#xff0c;将整理深度学习面试中最常被问到的25个问题和答案。如果你最近正在参加深度学习相关的面试工作…