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);

    }
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐