导入百万级数据
下面是使用EasyExcel导入百万级数据的步骤:
1.添加EasyExcel依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.3.0</version>
</dependency>
2.创建一个Java对象来表示Excel中的每行数据。
@Data
public class ExcelPetitionDto {
private String id;
@ExcelProperty("事件编号")
private String petitionNumber;
@NotBlank
@ExcelProperty("事件标题")
private String title;
@ExcelProperty("事件描述")
private String content;
@JsonFormat(timezone = "GMT+8", pattern ="yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "登记时间")
private Date registorOn;
3.创建监听类做一些特殊数据操作(无特殊数据处理也可以不用监听类)
// 创建一个监听器来处理读取的数据
/**
* @author :wangjp
* @date :2023/12/27 9:06
*/
public class PetitionExcelListener extends AnalysisEventListener<ExcelPetitionDto> {
@Override
public void invoke(ExcelPetitionDto o, AnalysisContext analysisContext) {
// 处理每行数据的逻辑
}
/**
* 解析完,全部回调
*
* @param analysisContext
*/
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
//解析完,全部回调逻辑实现
}
4.使用
@PostMapping("/importProvPetition")
@IgnoreToken
public AjaxResult importProvPetition(MultipartFile file) throws Exception {
//获取文件的输入流
InputStream inputStream = file.getInputStream();
List<ExcelPetitionDto> lst = EasyExcel.read(inputStream) //调用read方法
//注册自定义监听器,字段校验可以在监听器内实现
.registerReadListener(new PetitionExcelListener())
.head(ExcelPetitionDto.class) //对应导入的实体类
.sheet(0) //导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据
.headRowNumber(1) //列表头行数,1代表列表头有1行,第二行开始为数据行
.doReadSync(); //开始读Excel,返回一个List<T>集合,继续后续入库操作
//执行数据库操作
}