纵有疾风起
人生不言弃

java入门019~springboot批量导入excel数据到mysql

我们在前面的章节已经讲了如何用jpa或者mybatis来操作mysql数据库。这一节我们就来结合具体案例,来讲解下excel表格的上传,与excel表里数据的识别。并把识别后的数据批量导入到mysql数据库

所用知识点

  • springboot 2.1.9
  • excel文件上传
  • excel数据批量识别
  • excel数据上传到mysql数据库
  • jpa的使用

jpa的使用我们在上一节已经给大家讲过了,不知道如何创建的亲,记得去翻看上一节的文章:《java入门018~springboot2使用JPA操作mysql数据库》

一,创建一个springboot项目

1,使用idea创建springboot项目

java入门019~springboot批量导入excel数据到mysql插图

java入门019~springboot批量导入excel数据到mysql插图1

java入门019~springboot批量导入excel数据到mysql插图2

点击finish即可

java入门019~springboot批量导入excel数据到mysql插图3

二,引入识别excel的poi 和poi-ooxml类库

java入门019~springboot批量导入excel数据到mysql插图4

完整的pom.xml贴出来给大家

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.1.9.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.example</groupId>    <artifactId>demo</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>demo</name>    <description>Demo project for Spring Boot</description>    <properties>        <java.version>1.8</java.version>    </properties>    <dependencies>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>        <!--  操作excel      -->        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi</artifactId>            <version>3.16</version>        </dependency>        <dependency>            <groupId>org.apache.poi</groupId>            <artifactId>poi-ooxml</artifactId>            <version>3.16</version>        </dependency>    </dependencies>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

记得重新Reimport

java入门019~springboot批量导入excel数据到mysql插图5

三,创建一个controller用于接收上传的excel文件

java入门019~springboot批量导入excel数据到mysql插图6

完整代码如下

package com.example.demo;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import java.util.List;import java.util.Map;/** * 2019-10-07 18:35 * author: 编程小石头 * wechat:2501902696 * desc: 把excel里的数据保存到mysql数据库里 */@Controllerpublic class ExcelController {    @GetMapping("/index")    public String index() {        return "index";    }    @RequestMapping("/uploadExcel")    @ResponseBody    public String uploadExcel(@RequestParam("file") MultipartFile file,                              Map<String, Object> map) {        String name = file.getOriginalFilename();        if (name.length() < 6 || !name.substring(name.length() - 5).equals(".xlsx")) {            return "文件格式错误";        }        List<ExcelBean> list = null;        try {            list = ExcelUtils.excelToShopIdList(file.getInputStream());            if (list == null || list.size() <= 0) {                return "导入的数据为空";            }            //excel的数据保存到数据库            try {                for (ExcelBean excel : list) {                    System.out.println(excel.toString());                }            } catch (Exception e) {                System.out.println(e.getMessage());                return e.getMessage();            }        } catch (Exception e) {            System.out.println(e.getMessage());            return e.getMessage();        }        return "保存成功";    }}

简单讲解下上面代码的步骤

  • 1,获取用户上传的excel文件
  • 2,获取file流
  • 3,把excel文件流传入ExcelUtils.excelToShopIdList来识别excel里的数据
  • ExcelUtils很重要,是我们识别excel的重要步骤

四,ExcelUtils类如下

package com.example.demo;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.ss.usermodel.WorkbookFactory;import java.io.InputStream;import java.util.ArrayList;import java.util.List;/* * 操作excel * */public class ExcelUtils {    public static List<ExcelBean> excelToShopIdList(InputStream inputStream) {        List<ExcelBean> list = new ArrayList<>();        Workbook workbook = null;        try {            workbook = WorkbookFactory.create(inputStream);            inputStream.close();            //工作表对象            Sheet sheet = workbook.getSheetAt(0);            //总行数            int rowLength = sheet.getLastRowNum();            //            System.out.println("总行数有多少行" + rowLength);            //工作表的列            Row row = sheet.getRow(0);            //总列数            int colLength = row.getLastCellNum();            //            System.out.println("总列数有多少列" + colLength);            //得到指定的单元格            Cell cell = row.getCell(0);            for (int i = 1; i <= rowLength; i++) {                ExcelBean jiFenExcel = new ExcelBean();                row = sheet.getRow(i);                for (int j = 0; j < colLength; j++) {                    //列: 0姓名    1人员编号   2餐补 3部门                    cell = row.getCell(j);                    //                    System.out.print(cell + ",");                    if (cell != null) {                        cell.setCellType(Cell.CELL_TYPE_STRING);                        String data = cell.getStringCellValue();                        data = data.trim();                        //                        System.out.print(data);                        //                        if (StringUtils.isNumeric(data)) {                        if (j == 0) {                            jiFenExcel.setName(data);                        } else if (j == 1) {                            jiFenExcel.setJobNum(data);                        } else if (j == 2) {                            jiFenExcel.setCanBu(Integer.parseInt(data));                        } else if (j == 3) {                            jiFenExcel.setBumen(data);                        }                        //                        }                    }                }                list.add(jiFenExcel);                //                System.out.println("====");            }        } catch (Exception e) {        }        return list;    }}

五,定义一个用于上传excel文件的html静态网页

我们的index.html位于resources下的static里

java入门019~springboot批量导入excel数据到mysql插图7

代码如下

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>上传excel</title></head><body><h1>上传excel文件并存入到mysql数据库</h1><form action="/uploadExcel" method="post" enctype="multipart/form-data">    <p>文件上传</p>    <input type="file" name="file">    <p><input type="submit" value="提交"></p></form></body></html>

六,编写配置文件

java入门019~springboot批量导入excel数据到mysql插图8

这一步是让springboot可以直接访问我们上面第五步定义的静态html网页。

七,运行项目

java入门019~springboot批量导入excel数据到mysql插图9

运行起来后,我们通过index.html网页,来上传我们桌面的excel文件。

java入门019~springboot批量导入excel数据到mysql插图10

八,识别excel表格内容。

我们excel表格内容如下

java入门019~springboot批量导入excel数据到mysql插图11

我们通过上面第七步,上传excel到服务器后,识别出来的数据如下

java入门019~springboot批量导入excel数据到mysql插图12

通过上图可以看出,我们成功的识别出了excel里的数据。

既然数据已经识别出来了,接下来就是通过一个for循环,把我们识别出来的5行数据,批量的存到数据里就可以了。

今天就先到这里,下一节来讲如何把这些数据存到mysql数据库里。

往期回顾

文章转载于:https://www.jianshu.com/p/8356a59dad00

原著是一个有趣的人,若有侵权,请通知删除

未经允许不得转载:起风网 » java入门019~springboot批量导入excel数据到mysql
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录