用easyExcel如何实现?
要使提供的 ExcelModelListener 类来解析 Excel 文件并实现批量存储数据库的功能,需要结合 EasyExcel 库来读取 Excel 数据。具体来说,可以使用 EasyExcel.read() 方法来读取 Excel 文件,并指定 ExcelModelListener 作为事件监听器。
下面是调用 ExcelModelListener 进行 Excel 文件解析的完整示例代码:
1. 首先,确保已经添加了 EasyExcel 依赖
如果你还没有在 Maven 项目中引入 EasyExcel,可以在 pom.xml 文件中添加如下依赖:
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version> <!-- 确保使用最新版本 -->
</dependency>
2. 调用 ExcelModelListener 的代码
假设你有一个 Excel 文件 data.xlsx,并且 ExcelMode 是与 Excel 数据对应的 Java 类,你可以按照以下步骤来调用监听器解析 Excel 文件:
ExcelMode 类示例(简化版)
package com.zh.oukele.model;public class ExcelMode {private String field1;private String field2;// 这里是你Excel中每一列的对应字段// 省略getter和setter
}
使用 ExcelModelListener 解析 Excel 文件
package com.zh.oukele;import com.alibaba.excel.EasyExcel;
import com.zh.oukele.listener.ExcelModelListener;
import com.zh.oukele.model.ExcelMode;import java.io.File;public class ExcelImportService {public static void main(String[] args) {String fileName = "path/to/your/excel/data.xlsx"; // Excel 文件路径// 调用 EasyExcel 来读取文件EasyExcel.read(fileName, ExcelMode.class, new ExcelModelListener()).sheet().doRead();}
}
3. 代码解析
-
EasyExcel.read(fileName, ExcelMode.class, new ExcelModelListener()):- 这行代码调用了 EasyExcel 的读取方法,指定了 Excel 文件的路径
fileName,以及用于解析 Excel 数据的 Java 类ExcelMode。 ExcelModelListener被传递给EasyExcel作为事件监听器,这样 EasyExcel 在读取每一行数据时,就会调用ExcelModelListener中的invoke()方法。
- 这行代码调用了 EasyExcel 的读取方法,指定了 Excel 文件的路径
-
.sheet():- 该方法指定读取 Excel 文件中的一个 sheet(工作表)。如果 Excel 文件有多个 sheet,你可以指定其他 sheet,比如
.sheet(1)或.sheet("sheetName")。
- 该方法指定读取 Excel 文件中的一个 sheet(工作表)。如果 Excel 文件有多个 sheet,你可以指定其他 sheet,比如
-
.doRead():- 该方法触发实际的 Excel 数据读取操作。
4. ExcelModelListener 的工作流程
-
逐行读取数据:
ExcelModelListener的invoke()方法会在每一行数据被读取时被调用。你可以在这个方法中处理每一行的数据,例子中是将数据存储到list中。
-
批量处理:
- 每当读取的数据达到设定的批量大小(如
BATCH_COUNT = 5),就会调用saveData()方法将数据存储到数据库中,之后清空list。
- 每当读取的数据达到设定的批量大小(如
-
全部数据解析完成后:
doAfterAllAnalysed()会在 Excel 文件解析完成后被调用,通常用于进行一些收尾操作,比如存储最后一批数据或释放资源。
5. 完整代码示例
假设 Excel 文件中有两列数据(如 field1 和 field2),以下是完整的代码示例:
ExcelMode.java
package com.zh.oukele.model;public class ExcelMode {private String field1;private String field2;// Getter 和 Setter 方法public String getField1() {return field1;}public void setField1(String field1) {this.field1 = field1;}public String getField2() {return field2;}public void setField2(String field2) {this.field2 = field2;}@Overridepublic String toString() {return "ExcelMode{" +"field1='" + field1 + '\'' +", field2='" + field2 + '\'' +'}';}
}
ExcelModelListener.java(主要的类)
package com.zh.oukele.listener;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.zh.oukele.model.ExcelMode;import java.util.ArrayList;
import java.util.List;public class ExcelModelListener extends AnalysisEventListener<ExcelMode> {private static final int BATCH_COUNT = 5;List<ExcelMode> list = new ArrayList<ExcelMode>();private static int count = 1;@Overridepublic void invoke(ExcelMode data, AnalysisContext context) {System.out.println("解析到一条数据: { " + data.toString() + " }");list.add(data);count++;if (list.size() >= BATCH_COUNT) {saveData(count);list.clear();}}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {saveData(count);System.out.println("所有数据解析完成!");System.out.println("count :" + count);}private void saveData(int count) {System.out.println("{ " + count + " }条数据,开始存储数据库!" + list.size());// 这里你可以将 list 中的数据存入数据库System.out.println("存储数据库成功!");}
}
ExcelImportService.java(调用和执行)
package com.zh.oukele;import com.alibaba.excel.EasyExcel;
import com.zh.oukele.listener.ExcelModelListener;
import com.zh.oukele.model.ExcelMode;public class ExcelImportService {public static void main(String[] args) {String fileName = "path/to/your/excel/data.xlsx"; // Excel 文件路径// 调用 EasyExcel 来读取文件EasyExcel.read(fileName, ExcelMode.class, new ExcelModelListener()).sheet().doRead();}
}
总结
- 你通过
EasyExcel.read()读取 Excel 文件,并且指定ExcelModelListener作为事件监听器。 ExcelModelListener会处理每一行数据,当达到设定的批量大小时进行批量存储。- 数据解析完成后,可以通过
doAfterAllAnalysed()做一些收尾操作。
这个流程非常适合处理大量数据的 Excel 文件,能够在保证内存高效的同时,还能进行批量数据的持久化操作。
相关文章:
用easyExcel如何实现?
要使提供的 ExcelModelListener 类来解析 Excel 文件并实现批量存储数据库的功能,需要结合 EasyExcel 库来读取 Excel 数据。具体来说,可以使用 EasyExcel.read() 方法来读取 Excel 文件,并指定 ExcelModelListener 作为事件监听器。 下面是…...
从 X86 到 ARM :工控机迁移中的核心问题剖析
在工业控制领域,技术的不断演进促使着工控机从 X86 架构向 ARM 架构迁移。然而,这一过程并非一帆风顺,面临着诸多关键挑战。 首先,软件兼容性是一个重要问题。许多基于 X86 架构开发的工业控制软件可能无法直接在 ARM 架构上运行…...
大模型DeepSeek-R1学习
学习路线 机器学习-> 深度学习-> 强化学习-> 深度强化学习 大模型演进分支 微调: SFT 监督学习蒸馏:把大模型作为导师训练小模型RLHF:基于人类反馈的强化学习 PPO 近端策略优化 油门 - 重要性采样 权重 * 打分刹车 - clip 修剪…...
【STM32】H743的以太网MAC控制器的一个特殊功能
调试743的MAC,翻阅手册的时候,发现了一个有意思的功能 混杂模式 H743的MAC控制器,可以设置为混杂模式,这就意味着它可以做一些网络监控的应用,譬如连接具备端口镜像功能的交换机,然后直接代替PC实现网络数据…...
关于“i18n“在vue中的使用
关于"i18n"在vue中的使用 <!-- vue2中 --> <template><div>{{ $t("This campaign has expired.") }}}}</div> </template> <script> export default {created() {this.onLoading();},methods: {onLoading () {this.$…...
前缀树算法篇:前缀信息的巧妙获取
前缀树算法篇:前缀信息的巧妙获取 那么前缀树算法是一个非常常用的算法,那么在介绍我们前缀树具体的原理以及实现上,我们先来说一下我们前缀树所应用的一个场景,那么在一个字符串的数据集合当中,那么我们查询我们某个字…...
DVSI使用SenseGlove为开发虚拟现实场景技能培训
虚拟现实场景技能培训能够有效提升被培训者的技能熟练度,使其在现实世界中经历类似事件时第一时间做出正确反映,从而大大降低因缺乏相关技能经验所造成的财产、人员、时间损失。 DVSI(Digital Voice Systems Inc)是一家美国数字化…...
VSCode + Continue 实现AI编程助理
安装VS Code 直接官网下载安装,反正是免费的。 安装VS插件Continue 直接在插件市场中搜索, Continue,第一个就是了。 配置Chat Model 点击Add Chat model后进行选择: 选择Ollama后,需要点击下面的config file : 由于…...
【PHP的static】
关于静态属性 最简单直接:静态方法也是一样 看了很多关于静态和动态的说法,无非是从 调用方式, 类访问实例变量, 访问静态变量, 需不要实例化这几个方向,太空了。问使用场景,好一点的 能说个…...
考研操作系统----操作系统的概念定义功能和目标(仅仅作为王道哔站课程讲义作用)
目录 操作系统的概念定义功能和目标 操作系统的四个特征 操作系统的分类 编辑 操作系统的运行机制 系统调用 操作系统体系结构 操作系统引导 虚拟机 操作系统的概念定义功能和目标 什么是操作系统: 操作系统是指控制和管理整个计算机系统的软硬件资源&…...
从360度全景照片到高质量3D场景:介绍SC-Omnigs 3D重建系统
在当今的数字化时代,3D重建技术正在迅速发展,并广泛应用于文旅、空间智能和3D重建等领域。为了简化360度全景相机拍摄数据的处理流程,提高3D场景重建的质量和效率,我们开发了一款专门处理360度全景相机数据的3D重建系统——SC-Omnigs。本文将详细介绍这一系统的功能、特点及…...
前沿技术新趋势:值得关注的创新发展
量子通信是一种新兴的通信技术。它基于量子力学的原理,特别是量子叠加和量子纠缠。量子通信的核心在于量子比特qubits),与传统的比特不同,量子比特可以同时处于多种状态。这种特性使得信息的传输更为安全。 量子通信技术的最大优…...
算法跟练第十一弹——二叉树
文章目录 part01 递归遍历1.1 二叉树的前序遍历1.2 二叉树的中序遍历1.3 二叉树的后序遍历 part02 迭代遍历2.1 二叉树的前序遍历2.2 二叉树的中序遍历2.3 二叉树的后序遍历 part03 层序遍历3.1 二叉树的层序遍历3.2 二叉树的层序遍历II3.3 二叉树的右视图 归纳获取双重链表的第…...
机器学习(李宏毅)——BERT
一、前言 本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!! 读这篇文章必须先了解self-attention、Transformer,可参阅我其他文章。 二、大纲 BERT简介self-…...
新数据结构(7)——Object
Object类是所有类的父类,在 Java 中,每个类都直接或间接地继承自Object类,也就是说所有类都是object类的子类可以使用Object里的方法。 equals()和hashCode()是Java中Object类所包含的两个关键方法,下面将介绍两个方法。 和equa…...
云计算基础
环境准备 配置虚拟机安装docker 前提安装 步骤命令效果图 安装docker-compose 前提安装 步骤效果图 安装gitea 步骤命令效果图 执行docker-compose命令浏览器初始gitea配置浏览器登录gitea创建组织创建仓库 Drone安装 步骤效果图 非自动化部署 nginx安装redis安装jdk安装…...
利用kali linux 进行自动化渗透测试
本方案旨在自动化创建渗透测试全流程 一、架构 1.智能信息收集体系 class IntelligentOSINT:def __init__(self, target):self.target targetself.intelligence_sources [OSINT_Platforms,DeepWeb_Crawlers, SocialMedia_Trackers,ML_Correlation_Engine]def advanced_col…...
【Vue中BUG解决】npm error path git
报错内容如下: 从错误信息可知,这是一个 ENOENT(No Entry,即找不到文件或目录)错误,并且与 git 相关。具体来说,npm 在尝试调用 git 时,无法找到 git 可执行文件,下面为…...
GPT-4o微调SFT及强化学习DPO数据集构建
假设,已经标注的训练数据集df包含了提示词、输入和输出三列。 构建微调SFT的数据集代码如下: data [] for x in df.values:prompt x[1]user_content x[2]assistant_content x[3]data.append({"messages": [{"role": "sys…...
element-plus 解决el-dialog背后的页面滚动问题,及其内容有下拉框出现错位问题
这个问题通常是因为 el‑dialog 默认会锁定 body 的滚动(通过给 body 添加隐藏滚动条的样式),从而导致页面在打开对话框时跳转到顶部。解决方法是在使用 el‑dialog 时禁用锁定滚动功能。 <el-dialogv-model"dialogVisible":lo…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
