在springboot中,使用easyexcel读取excel文件内容并写入数据库
传入一个规范的excel文件,读取其中内容并将数据存储到mysql数据库中。
本系统为一个简单的学生管理系统,excel文件与数据库的学生表中相同,第一列为学生id,第二列为学生姓名。
1. 引入依赖
在pom.xml中引入阿里巴巴的easyexcel依赖。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
2. 创建用户信息类
@Data
public class ExcelStudent {
@ExcelProperty(index = 0) //excel中第0列为学生id
private String id;
@ExcelProperty(index = 1) //excel中第1列为学生姓名
private String name;
}
3. 创建监听
因为这个监听对象需要我们自己new,因此不能交给spring容器进行管理。想要在该监听类中调用service的方法,需要手动传入service对象。
public class StudentExcelListener extends AnalysisEventListener<ExcelStudent> {
private StudentService studentService;
//手动传入service对象
public StudentExcelListener(StudentService studentService) {
this.studentService = studentService;
}
//一行一行读取excel中内容
@Override
public void invoke(ExcelStudent excelStudent, AnalysisContext analysisContext) {
if (excelStudent != null) { //如果excel不为空
//将excelStudenteghieghieghieghieghieghieghieghieg中的数据存入实体类student的对象中
Student student = new Student();
student.setStudentId(excelStudent.getId());
student.setStudentName(excelStudent.getName());
//调用service方法,将数据存入数据库中
studentService.save(student);
}
}
//读取完毕之后执行
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
}
}
4. 写service
@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, Student> implements StudentService {
@Override
public void saveByExcel(MultipartFile file, StudentService studentService) {
try {
InputStream inputStream = file.getInputStream();
EasyExcel.read(inputStream, ExcelStudent.class, new StudentExcelListener(studentService)).sheet().doRead();
}catch (Exception e){
System.out.println(e);
}
}
}
在写service实现类的时候,有两个地方要注意。一个是MultipartFile类型的文件直接转成java类型的文件会报错,所以使用流来读取excel(在选easyexcel的read函数的时候被选错了)。第二个要注意的地方就是该操作要捕获异常,不然也会报错。还有就是上面的代码为service实现类的,service接口中也要对应地加上。
5. 写controller
直接调用service中的方法。
//根据excel添加学生
@ApiOperation(value = "根据excel添加学生")
@PostMapping("addStudentByExcel")
public void addStudentByExcel(MultipartFile file){
studentService.saveByExcel(file, studentService);
}
6. 在swagger中测试
选择准备好的excel文件,测试。然后刷新数据库,可以发现数据已经成功地加到数据库中了。大功告成!