listener代码
public class UserMapListener extends AnalysisEventListener<Map<Integer,String>> {
//由于Listener类不能被spring管理,会出现线程安全的问题所以通过有参构造来实现方法的注入
public UserMapListener(UserService userService) {
this.userService = userService;
}
private UserService userService;
private List<User> userList=new ArrayList<>();
/**
* @param integerStringMap excel每一行的数据
*/
@SneakyThrows
@Override
public void invoke(Map<Integer, String> integerStringMap, AnalysisContext analysisContext) {
SimpleDateFormat sdf=new SimpleDateFormat();
User user=new User();
Date date=sdf.parse(integerStringMap.get(3));
//一般excel不会存在id列所有不用给id赋值
user.setName(integerStringMap.get(0));
user.setGender(Integer.parseInt(integerStringMap.get(1)));
user.setNumber(integerStringMap.get(2));
user.setBirthDate(date);
user.setAddress(integerStringMap.get(4));
user.setPhone(integerStringMap.get(5));
userList.add(user);
if (userList.size()%5==0){
userService.insertList(userList);
userList.clear();
}
}
@Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) {
userService.insertList(userList);
System.out.println("执行完毕");
}
User对象
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user")
public class User {
@TableId(value = "id",type = IdType.ASSIGN_ID)
@ExcelIgnore
private String id;
private String name;
private Integer gender;
private String number;
private Date birthDate;
private String address;
private String phone;
}
service代码
@Override
public void UserMap(MultipartFile multipartFile) throws IOException {
//获取文件流
ExcelReader build = EasyExcel.read(multipartFile.getInputStream()).build();
ReadSheet build1 = EasyExcel
//第一个工作区间的表
.readSheet(0)
//跳过第一条标题
.headRowNumber(1)
.registerReadListener(new UserMapListener(UserServiceImpl.this))
.build();
//合并两个
build.read(build1);
}