esayexcel快速入门

1.导入pom

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.xmlbeans</groupId>
            <artifactId>xmlbeans</artifactId>
            <version>3.1.0</version>
        </dependency>

2.创建esayBaen用于封装

package com.pzh.guli.service.edu.pojo.excel;

import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;

@Data
public class ExcelSubject {
    @ExcelProperty("一级分类")
    private String levelOneTitle;
    @ExcelProperty("二级分类")
    private String levelTowTile;
}

3.创建监听器用于解析数据和进行数据库的修改操作(我这里是封装二级目录比较复杂 我单独说关键点)

@Slf4j
@AllArgsConstructor
@NoArgsConstructor
public class ExcelSubjectListener extends AnalysisEventListener<ExcelSubject> {
    private SubjectMapper subjectMapper;
    @Override
    public void invoke(ExcelSubject data, AnalysisContext analysisContext) {
        log.info("解析到一条数据"+data);
        log.info("一级目录"+data.getLevelOneTitle());
        String levelOneTitle = data.getLevelOneTitle();
        String levelTowTile = data.getLevelTowTile();
        String parentId=null;
         //判断数据是否存在
        Subject byTitle = this.getByTitle(levelOneTitle);
        if (byTitle==null){
            Subject subject=new Subject();
            subject.setParentId("0");
            subject.setTitle(levelOneTitle);
            subjectMapper.insert(subject);
            Subject again = getByTitle(levelOneTitle);
            parentId=again.getId();
        }
        else {
            parentId=byTitle.getId();
        }
        //判断后面是否存在
        Subject two = this.getByTitle(levelTowTile, parentId);
        if (two==null){
            Subject subject=new Subject();
            subject.setTitle(levelTowTile);
            subject.setParentId(parentId);
            subjectMapper.insert(subject);
        }
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
       log.info("剩余解析完成");
    }
    private Subject getByTitle(String title){
        QueryWrapper<Subject> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("title",title).eq("parent_id","0");
        return subjectMapper.selectOne(queryWrapper);
    }
    private Subject getByTitle(String title,String parentId){
        QueryWrapper<Subject> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("title",title).eq("parent_id",parentId);
        return subjectMapper.selectOne(queryWrapper);
    }
}

关键点:invoke(ExcelSubject data,AnalysisContext analysisContext)

data就是监听器解析的数据 你就可以进行数据库操作,你需要知道的是这种数据操作是一行一行的解析的,对内存的节省很有作用。

4.使用EeayEecel.read读取数据(serviceImp)

  @Resource
    private SubjectMapper subjectMapper;
    @Override
    public void batchImport(InputStream inputStream) {
        EasyExcel.read(inputStream, ExcelSubject.class,new ExcelSubjectListener(subjectMapper))
                .excelType(ExcelTypeEnum.XLS)
                .sheet().doRead();
    }

 最后自行编写controller实现方法测试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值