使用easyexcel读取excel并生成sql语句

1、引入pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.bjrhc</groupId><artifactId>readExcel</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.3</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version> <!-- 根据最新版本进行更新 --></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>RELEASE</version><scope>compile</scope></dependency></dependencies></project>

2、创建实体类

如果你不想读sql中的每一个字段,就可以像我这样,加上注解,只声明要读的列:

@Data
public class ExcelPO {@ExcelProperty("业务对象")private String obj;@ExcelProperty("业务部门")private String bumen;@ExcelProperty("属性")private String shuxing;@ExcelProperty("来源表英文名")private String tableNameEnglish;@ExcelProperty("来源表中文名")private String tableNameChina;@ExcelProperty("来源字段英文名")private String ziduan;
}

3、编写工具类

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener;
import lombok.SneakyThrows;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;public class ExcelListener {public static void main(String[] args) throws Exception {//excel路径String fileName = "doc/excel.xlsx";//读取EasyExcel.read(fileName)//读第0个sheet表.sheet(0)//从第二行开始读.headRowNumber(1)//对应的实体类.head(ExcelPO.class).registerReadListener(new TransformerDataListener()).doReadSync();}public static class TransformerDataListener implements ReadListener<ExcelPO> {//用来接受读出来的数据Map<String, List<Object>> hashMap = new HashMap<>();@SneakyThrows@Overridepublic void invoke(ExcelPO data, AnalysisContext context) {// 每一行数据在这里处理if (data.getBumen().equals("选择部门")){if (data.getObj().contains("选择对象")){if (data.getShuxing().equals("字段信息") ||data.getShuxing().equals("字段信息") ||data.getShuxing().equals("字段信息") ||data.getShuxing().equals("字段信息") ||data.getShuxing().equals("字段信息") ||data.getShuxing().equals("字段信息") ||data.getShuxing().equals("字段信息") ||data.getShuxing().equals("字段信息") ||data.getShuxing().equals("字段信息") ||data.getShuxing().equals("字段信息") ){//判断是否已经存储过这张表,如果存储过直接给他的value加上要存储的字段if (hashMap.containsKey(data.getTableNameEnglish())){List list = hashMap.get(data.getTableNameEnglish());list.add(data.getZiduan());}else {//如果没有则添加一个新的mapList list1 = new ArrayList<>();list1.add(data.getZiduan());hashMap.put(data.getTableNameEnglish(),list1);}}}};//创建一个用来存储我们查到并需要的内容的txtString txt = "doc/text.txt";File file = new File(txt);//不存在则创建一个新的txt文档if (!file.exists()) {try {file.createNewFile();} catch (IOException e) {e.printStackTrace();}}//写txtFileWriter fw = new FileWriter(file);BufferedWriter bw = new BufferedWriter(fw);for (Map.Entry<String, List<Object>> entry : hashMap.entrySet()) {String key = entry.getKey();List<Object> values = entry.getValue();StringBuilder s = new StringBuilder("select * from "+ key + " where ");// 输出List中的每个值for (Object value : values) {s.append(value+" is null or ");}s.replace(s.lastIndexOf("or"), s.lastIndexOf("or")+"or".length(), ";");bw.write(String.valueOf(s));bw.newLine();}//写操作完成后关闭流bw.close();}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// 所有数据解析完成后的回调}// 如果需要处理异常,重写下列方法@Overridepublic void onException(Exception exception, AnalysisContext context) {exception.printStackTrace();}}
}

在这里我将生成的sql放入了一个新的txt中,项目目录参考:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【IR-SDE】Image Restoration SDE项目演示运行app.py

背景&#xff1a; code:GitHub - Algolzw/image-restoration-sde: Image Restoration with Mean-Reverting Stochastic Differential Equations, ICML 2023. Winning solution of the NTIRE 2023 Image Shadow Removal Challenge. paper: Official PyTorch Implementations o…

LabVIEW闭环步进电机运动系统设计及精度分析

LabVIEW闭环步进电机运动系统设计及精度分析 在自动化设备不断发展的当代&#xff0c;闭环步进电机以其高精度和可靠性成为了自动化设备的重要组成部分。以LabVIEW软件为核心&#xff0c;结合运动控制卡及驱动器模块&#xff0c;设计并实现了一个闭环步进电机的多轴运动控制系…

Rancher1.0版本安装使用

Rancher1.0版本安装使用 准备环境 rancher是一个容器管理和服务编排工具。 如下链接&#xff0c;讲的可以&#xff0c;大家参考下&#xff0c;我已经测试过了。 http://tonybai.com/2016/04/14/an-introduction-about-rancher/ 操作系统Centos7.2 用户为root。最好使用Cent…

Mapbox 教程: 改变地图样式

注&#xff1a;相关功能在Mapbox GL JS v3中可用。在新版本中&#xff0c;默认使用标准样式&#xff0c;在创建地图时&#xff0c;可以在构造函数中明确指定style option 设置指定样式&#xff0c;也可以不设置style option 从而使用默认样式。 本示例通过Mapbox加载了一份带三…

esxi配置使用以及虚拟机管理

vSphere Client安装和esxi主机 esxi配置 许可证 虚拟机管理 vSphere Client中创建、删除等虚拟机的管理。 vSphere Client中创建虚拟机并安装操作系统&#xff1b; 步骤1 创建虚拟机 密码&#xff1a;Tongxin2023 (1) 厚置备延迟置零 以默认的厚格式创建虚拟磁盘。创建过…

佛山市人工智能产业生态交流会:实在智能Agent引领“智造浪潮”

制造业&#xff0c;实体经济的核心&#xff0c;技术创新的先锋&#xff0c;供给侧结构性改革的关键。在新一轮产业竞争中&#xff0c;数字化转型成为制造业升级的必由之路&#xff0c;是引领未来的重要抓手。 为促进数字经济赋能实体经济&#xff0c;加快人工智能技术的推广应用…

ubuntu 20.04 设置国内镜像源(阿里源、清华源)

在网上搜了好多设置国内镜像源&#xff0c;都写的乱七八糟的&#xff0c;都是随便换&#xff0c;最后还是换得一堆问题。 镜像源也是跟版本一一对应的&#xff0c;不能随便一个国内源就还过去用&#xff0c;否则会出现各种各样的问题&#xff0c;我也是吃过亏之后才发现的。 国…

通讯录项目(用c语言实现)

一.什么是通讯录 通讯录是一种用于存储联系人信息的工具或应用程序。它是一种电子化的地址簿&#xff0c;用于记录和管理个人、机构或组织的联系方式&#xff0c;如姓名、电话号码、电子邮件地址和邮寄地址等。通讯录的目的是方便用户在需要时查找和联系他人。 通讯录通常以列…

手眼标定问题排查_2_圆网格数据排查

经过昨天晚上的调试&#xff0c;发现了一个主要问题&#xff1a;使用圆网格标定板标定时&#xff0c;不能使用cornerSubPix()函数&#xff0c;否则寻找角点时&#xff0c;会导致图一的情况(裁剪为30万像素)。就找到能参考的程序&#xff0c;推进还是很快的。 图一 一些数据对比…

imu6xl点灯(C语言)

参考正点原子开发指南 根据原理图可以看出&#xff0c;我们需要设置低电平导通电路。 在原理图上找到LED0&#xff0c;对应IO为GPIO3 IO复用配置 IMX6UL每个引脚都可以复用 在用户手册第30章可以找到IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03这个寄存器&#xff0c;地址为0x020E0068&…

Linux网络名称空间和虚拟机有何区别

在Linux系统中&#xff0c;网络名称空间和虚拟机都是实现资源隔离和虚拟化的技术&#xff0c;但它们在设计理念、实现机制、资源消耗、使用场景等方面存在着显著的区别。本文旨在全方位、系统性地分析这两种技术的区别。&#x1f50d; 1. 设计理念与实现机制 1.1. 网络名称空…

未来汽车硬件安全的需求(2)

目录 4.汽车安全控制器 4.1 TPM2.0 4.2 安全控制器的硬件保护措施 5. EVITA HSM和安全控制器结合 6.小结 4.汽车安全控制器 汽车安全控制器是用于汽车工业安全关键应用的微控制器。 他们的保护水平远远高于EVITA HSM。今天的典型应用是移动通信&#xff0c;V2X、SOTA、…

python使用ffmpeg分割视频为Hls分片文件/使用OpenSSL加密m3u8和TS文件

FFmpeg和OpenSSL是一个开源免费的软件&#xff0c;在官网上就能下载&#xff0c; FFmpage网址&#xff08;建议选择文件名full结尾的文件&#xff09;&#xff1a;Builds - CODEX FFMPEG gyan.dev OpenSSL网址&#xff08;建议选择win64的MSI文件&#xff09;&#xff1a;Win3…

maven依赖管理:依赖仓库管理

1、Maven的依赖如何存放管理&#xff1f; Maven中存在依赖组件&#xff08;常用的是jar包、war包、pom等&#xff0c;也可把Zip包等通过POM文件定义为依赖组件&#xff09;的地方称为仓库&#xff08;Repository&#xff09;。 在Maven中&#xff0c;仓库有三种类型&#xff1…

CSS中grid网格布局(秒懂如何实现网格布局)-菜鸟教程

目录 一、概念 二、使用 1.网格元素 2.display属性 3.网格轨道 4.fr 单位 5.网格单元 6.网格区域 7.网格列与行 8.CSS 网格属性 三、网格容器 display&#xff1a; grid-template-columns 和 grid-template-rows&#xff1a; grid-gap、grid-row-gap 和 grid-column-…

如何使用SQL注入工具?

前言 今天来讲讲SQL注入工具&#xff0c;sqlmap。如何使用它来一步步爆库。 sqlmap官方地址如下。 sqlmap: automatic SQL injection and database takeover tool 前期准备&#xff0c;需要先安装好docker、docker-compose。 一个运行的后端服务&#xff0c;用于写一个存在…

计算机网络-TCP断开连接阶段错误应对机制

连接断开阶段 四次挥手机制&#xff1a;TCP连接的断开需要四次挥手&#xff0c;这是因为双方都需要独立地关闭数据传输。第二次和第三次挥手不能合并&#xff0c;因为在回复第二次挥手的时候&#xff0c;可能还有数据没有接收完成&#xff0c;所以需要先回复ACK报文&#xff0c…

【U8+】打开固定资产卡片,提示:运行时错误‘91’,未设置对象变量或with block变量。

【问题描述】 用友U8软件&#xff0c;固定资产模中打开某张卡片后&#xff0c; 提示&#xff1a;运行时错误‘91’&#xff0c;未设置对象变量或with block变量。 Ps&#xff1a;但不是所有卡片打开的时候都会提示&#xff0c;有的正常。 【解决方法】 跟踪数据库后&#xff…

SpringBoot入门(Hello World 项目)

SpringBoot关键结构 1.2.1 Core Container The Core Container consists of the Core, Beans, Context, and Expression Language modules. The Core and Beans modules provide the fundamental parts of the framework, including the IoC and Dependency Injection featur…

C语言易错知识点(3):字符数组的修改、sscanf、sprintf

字符数组是一个很细节的语法&#xff0c;涉及很多知识点&#xff0c;这篇文章我主要分享一下如何理解字符数组&#xff0c;以及对应的sscanf、sprintf有什么用 1.字符数组的初始化以及内容修改易错点 字符数组的初始化方式有两种&#xff0c;一种是直接用字符串进行初始化&am…