使用POI技术将Excel文件导入数据库
1.导入jar包
1)创建Springboot项目选择所需的应用场景
2)再根据所需导入的Excel的类型选择对应的POI jar包
<!--操作Excel97-2003版本,以xls后缀结尾-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
<!--操作Excel2007以上版本,以xlsx后缀结尾-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
2.配置application.yml文件
分别配置数据库连接配置和mybatis的映射配置
3.创建导入目标表
创建目标表并创建所需序列
4.创建实体类、mapper文件、mapping映射文件及service层
1)创建实体类(使用lombok包中的Data注解,可省略set、get方法)
2)书写mapper文件及mapper.xml文件
进行Excel导入应该是要对数据库进行插入操作,所以我们需要编写一个新增的方法
mapper文件
mapper.xml文件
service层及serviceimpl
写完mapper及mapper.xml文件我们需要通过service层去调用
5.最后编写controller控制层实现导入功能
package com.example.demo.controller;
import com.example.demo.pojo.Excel;
import com.example.demo.pojo.Student;
import com.example.demo.service.StudentService;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
@RestController
public class StudentController {
@Autowired
private StudentService studentService;
@RequestMapping("student")
public void write() throws IOException {
InputStream is = new FileInputStream("C:/Users/cts/Desktop/学生.xlsx");//通过InputStream读取需要导入的文件名
XSSFWorkbook xss = new XSSFWorkbook(is);//xls后缀文件通过HSSFWorkbook创建工作簿,xlxs通过XSSFWorkbook创建工作簿
XSSFSheet sheet = xss.getSheetAt(0);//获取Excel文件的sheet页,从0开始
// HSSFWorkbook hss = new HSSFWorkbook(is);
// HSSFSheet sheet = hss.getSheetAt(0);
for (Row row : sheet) {//获取sheet页的行数
if(row.getRowNum()==0){//跳过表头信息
continue;
}
String name = row.getCell(0).getStringCellValue();//获取每一列的数据,getStringCellValue()用于获取string类型数据
double age = row.getCell(1).getNumericCellValue();//getNumericCellValue()用于获取数字类型的数据,获取的类型为double
String sex = row.getCell(2).getStringCellValue();
Student student = new Student();
student.setName(name);
student.setAge((int)age);
student.setSex(updateSex(sex));
try {
studentService.insertStudent(student);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static Integer updateSex(String sex){
if(sex.equals("男")){
return 0;
}else{
return 1;
}
}
}
6.测试
在浏览器中输入访问路径
运行成功后查询数据库,数据成功插入