SpringBoot百万行Excel导入MySQL实践
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
// 假设ExcelModel是对应Excel数据的实体类
@Data
public class ExcelModel {
// 假设有一些字段
private String field1;
private String field2;
// ...
}
// 自定义监听器
public class ExcelListener extends AnalysisEventListener<ExcelModel> {
private List<ExcelModel> datas = new ArrayList<ExcelModel>();
@Override
public void invoke(ExcelModel data, AnalysisContext context) {
datas.add(data);
}
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
// 数据处理完成后的操作,例如将datas批量保存到数据库
// jdbcTemplate.batchUpdate("INSERT INTO table_name (field1, field2) VALUES (?, ?)", datas);
}
}
@RestController
public class ExcelImportController {
@Autowired
private JdbcTemplate jdbcTemplate;
@PostMapping("/importExcel")
public String importExcel(@RequestParam("file") MultipartFile file) {
try {
InputStream in = file.getInputStream();
ExcelListener listener = new ExcelListener();
EasyExcel.read(in, ExcelModel.class, listener).sheet().doRead();
return "success";
} catch (IOException e) {
e.printStackTrace();
return "failure";
}
}
}
这个代码实例展示了如何使用Spring Boot和EasyExcel来导入百万行Excel数据到MySQL数据库。其中ExcelModel是一个Java实体类,用于映射Excel数据;ExcelListener是自定义的监听器,用于接收解析出来的Excel数据;ExcelImportController是一个Spring RestController,用于处理文件上传和数据导入。在导入完成后,数据会被批量插入到数据库中,以提高性能。
评论已关闭