所用知识点我们在前面的章节已经讲了如何用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项目
点击finish即可
完整的pom.xml贴出来给大家
4.0.0 org.springframework.boot spring-boot-starter-parent2.1.9.RELEASE com.example demo0.0.1-SNAPSHOT demo Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testtest org.apache.poi poi3.16 org.apache.poi poi-ooxml3.16 org.springframework.boot spring-boot-maven-plugin
记得重新Reimport
完整代码如下
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;
@Controller
public class ExcelController {
@GetMapping("/index")
public String index() {
return "index";
}
@RequestMapping("/uploadExcel")
@ResponseBody
public String uploadExcel(@RequestParam("file") MultipartFile file,
Map map) {
String name = file.getOriginalFilename();
if (name.length() < 6 || !name.substring(name.length() - 5).equals(".xlsx")) {
return "文件格式错误";
}
List 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的重要步骤
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;
public class ExcelUtils {
public static List excelToShopIdList(InputStream inputStream) {
List 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里
代码如下
上传excel
上传excel文件并存入到mysql数据库
六,编写配置文件
这一步是让springboot可以直接访问我们上面第五步定义的静态html网页。
运行起来后,我们通过index.html网页,来上传我们桌面的excel文件。
我们excel表格内容如下
我们通过上面第七步,上传excel到服务器后,识别出来的数据如下
通过上图可以看出,我们成功的识别出了excel里的数据。
今天就先到这里,下一节来讲如何把这些数据存到mysql数据库里。



