实现效果:将Excel中大批量数据导入数据库中
实现思路:创建一张临时表,将Excel数据导入到临时表中,再将临时表中的数据导入到正式的数据库中,并将临时表清空。
1.创建临时表,并使用yudao代码生成器生成代码。
2.创建excelImportVo
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = false) // 设置 chain = false,避免用户导入有问题
public class LightPoleTempImportVO {
@ExcelProperty("灯杆名称")
private String poleName;
@ExcelProperty("灯杆编号")
private String poleCode;
@ExcelProperty("灯杆类型")
private String poleType;
@ExcelProperty("所属区域")
private String area;
@ExcelProperty("所在道路")
private String street;
@ExcelProperty("坐标经度")
private Double longitude;
@ExcelProperty("坐标纬度")
private Double latitude;
@ExcelProperty("备注")
private String remark;
}
3.使用ExcelUntil进行导入数据
controller
//导入临时表
@PostMapping("/importTemp")
public List<LightPoleTempDO> importExcelTemp(@RequestParam("file") MultipartFile file) throws Exception {
List<LightPoleTempImportVO> list = ExcelUtils.read(file, LightPoleTempImportVO.class);
return lightPoleTempService.importLightPoleTempList(list);
}
service
List<LightPoleTempDO> importLightPoleTempList(List<LightPoleTempImportVO> list);
serviceImpl
@Override
public List<LightPoleTempDO> importLightPoleTempList(List<LightPoleTempImportVO> importLightPoleTemp) {
ArrayList<LightPoleTempDO> lightPoleTempDOS = new ArrayList<>();
importLightPoleTemp.stream().forEach(item ->{
LightPoleTempDO poleTempDO = new LightPoleTempDO();
poleTempDO.setPoleCode(item.getPoleCode());
poleTempDO.setPoleType(item.getPoleType());
poleTempDO.setPoleName(item.getPoleName());
poleTempDO.setArea(item.getArea());
poleTempDO.setLatitude(item.getLatitude());
poleTempDO.setLongitude(item.getLongitude());
poleTempDO.setRemark(item.getRemark());
poleTempDO.setStreet(item.getStreet());
lightPoleTempDOS.add(poleTempDO);
});
lightPoleTempMapper.insertBatch(lightPoleTempDOS);
return lightPoleTempDOS;
}
此时实现Excel导入到临时表中,后面再将临时表中的数据取出自己需要的存入到正式表中即可,清空临时表