行业知识
通过java将Excel表格导入数据到数据库
2、连接数据库的框架可自行选择,下文使用的是mybatis-plus
Maven
org.apache.poi
poi
4.1.2
org.apache.poi
poi-ooxml
4.1.2
org.apache.poi
poi-ooxml-schemas
4.1.2
Gradle
compile ‘org.apache.poi:poi:4.1.2’
compile ‘org.apache.poi:poi-ooxml:4.1.2’
compile ‘org.apache.poi:poi-ooxml-schemas:4.1.2’
excel导入数据到数据库原理。
- 当我们拿到excel表格,我们第一步应该先读取excel里面的数据信息。
- 通过特定的方法将读出来的数据封装到对象中。
- 每一行表示一个对象,每一列表示一个对象中的每一个字段属性。
- 当有多行时我们需要使用List(Object是对应excel表格数据的实体类对象)来存取对象
- 拿到对象数组后,我们可以通过遍历得到,每一个对象,再通过mybatis将对象导入到数据库
知道了原理,有了思路。我们就可以开始干活了。
1、先拿到excel文件,我们使用MultipartFile接受文件。
2、拿到文件后。通过文件得到一个输入流
3、通过poi对excel进行解析,将表格中的每个数据通过for循环得到。
demo案例:(内附注释)
================================================================================
先了解到我们需要保存哪些字段。
根据字段。创建对应的实体类。
实体类
public class BuiPatientInfo{
private static final long serialVersionUID = 1L;
/**
- 患者姓名
*/
@TableField(“patient_name”)
private String patientName;
/**
- 加密存储,不可反编译、列表不显示
*/
@TableField(“patient_identity”)
private String patientIdentity;
/**
- 就诊卡号
*/
@TableField(“healing_Id”)
private String healingId;
/**
- (性别)自动从身份证中截取
*/
@TableField(“patient_sex”)
private Integer patientSex;
/**
- (出生年月)自动从身份证中截取
*/
@TableField(“patient_birthDate”)
private LocalDate patientBirthdate;
/**
- 其他信息说明
*/
@TableField(“else_Info”)
private String elseInfo;
/**
- 创建人ID
*/
@TableField(“create_id”)
private Long createId;
/**
- 创建时间
*/
@TableField(“create_time”)
private LocalDateTime createTime;
/**
- 最后修改时间
*/
@TableField(“update_time”)
private LocalDateTime updateTime;
@TableField(“patient_state”)
private Integer patientState;
}
- 以下代码包含了对excel文件的检验是否合法。excel是哪年版的。
数据导入解析工具类
package com.mosukj.util;
import com.mosukj.manage.entity.BuiPatientInfo;
import com.spire.ms.System.DateTime;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
/**
-
@author xjt
-
@version 1.0
*/
public class ReadPatientExcelUtil {
//总行数
private static int totalRows = 0;
//总条数
private static int totalCells = 0;
//错误信息接收器
private static String errorMsg;
/**
-
读EXCEL文件,获取信息集合
-
@return
*/
public static List getExcelInfo(MultipartFile mFile) {
String fileName = mFile.getOriginalFilename();//获取文件名
try {
if (!validateExcel(fileName)) {// 验证文件名是否合格
return null;
}
boolean isExcel2003 = true;// 根据文件名判断文件是2003版本还是2007版本
if (isExcel2007(fileName)) {
isExcel2003 = false;
}
List userList = createExcel(mFile.getInputStream(), isExcel2003);
return userList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
-
根据excel里面的内容读取客户信息
-
@param is 输入流
-
@param isExcel2003 excel是2003还是2007版本
-
@return
-
@throws IOException
*/
public static List createExcel(InputStream is, boolean isExcel2003) {
try{
Workbook wb = null;
if (isExcel2003) {// 当excel是2003时,创建excel2003
wb = new HSSFWorkbook(is);
} else {// 当excel是2007时,创建excel2007
wb = new XSSFWorkbook(is);
}
List userList = readExcelValue(wb);// 读取Excel里面客户的信息
return userList;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
-
读取Excel里面客户的信息
-
@param wb
-
@return
*/
private static List readExcelValue(Workbook wb) {
//默认会跳过第一行标题
// 得到第一个shell
Sheet sheet = wb.getSheetAt(0);
// 得到Excel的行数
totalRows = sheet.getPhysicalNumberOfRows();
// 得到Excel的列数(前提是有行数)
if (totalRows > 1 && sheet.getRow(0) != null) {
totalCells = sheet.getRow(0).getPhysicalNumberOfCells();
}
List userList = new ArrayList();
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
架构学习资料
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
254671a72faed303032d36.jpg" alt=“img” style=“zoom: 33%;” />
架构学习资料
[外链图片转存中…(img-8bbvOySF-1712520210027)]
[外链图片转存中…(img-MBiRgm6N-1712520210028)]
[外链图片转存中…(img-jUfJuvrT-1712520210028)]
[外链图片转存中…(img-a1WCHKA6-1712520210028)]
[外链图片转存中…(img-mg4YUtRK-1712520210028)]
由于篇幅限制小编,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门即可获取!
-
-
-
-
- 以下代码包含了对excel文件的检验是否合法。excel是哪年版的。
- 最后修改时间
- 创建时间
- 创建人ID
- 其他信息说明
- (出生年月)自动从身份证中截取
- (性别)自动从身份证中截取
- 就诊卡号
- 加密存储,不可反编译、列表不显示