做easyexcel遇到的问题数据库采用的mybatis-plus
导入坐标
<!-- easyexcel依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.1</version>
</dependency>
service层
//添加课程分类 @Override public void saveSubject(MultipartFile file, EduSubjectService subjectService) { try { InputStream in = file.getInputStream(); EasyExcel.read(in, SubjectData.class, new SubjectListener(subjectService)).sheet().doRead(); } catch (Exception e) { e.printStackTrace(); } }
监听器里面要注意:
//因为SubjectListener不能交给Spring管理,需要自己new,不能注入其他对象
//不能实现数据库的操作,利用有参构造传过来

public class SubjectListener extends AnalysisEventListener<SubjectData> { //因为SubjectListener不能交给Spring管理,需要自己new,不能注入其他对象 //不能实现数据库的操作,利用有参构造传过来 public EduSubjectService subjectService; public SubjectListener() { } public SubjectListener(EduSubjectService subjectService) { this.subjectService = subjectService; } //读取excel内容,一行一行的读取 @Override public void invoke(SubjectData subjectData, AnalysisContext analysisContext) { if (subjectData == null){ throw new GuliException(20001,"文件数据为空"); } EduSubject existOneSubject = this.existOneSubject(subjectData.getOneSubjectName(), subjectService); if (existOneSubject==null){//表里没有相同的一级分类,进行添加 EduSubject subject = new EduSubject(); subject.setParentId("0"); subject.setTitle(subjectData.getOneSubjectName());//一级分类名称 subjectService.save(subject); } //获取一级分类的id值 String pid=existOneSubject.getId(); //添加二级分类 //判断二级分类是否重复 EduSubject existTwoSubject = this.existTwoSubject(subjectData.getTwoSubjectName(), subjectService, pid); if (existTwoSubject == null) { EduSubject subject = new EduSubject(); subject.setParentId(pid); subject.setTitle(subjectData.getTwoSubjectName());//二级分类名称 subjectService.save(subject); } } //判断一级分类不能重复添加 private EduSubject existOneSubject(String name,EduSubjectService subjectService){ QueryWrapper<EduSubject> wrapper=new QueryWrapper<>(); wrapper.eq("title",name); wrapper.eq("parent_id","0"); EduSubject oneSubject = subjectService.getOne(wrapper); return oneSubject; } //判断二级分类不能重复添加 private EduSubject existTwoSubject(String name,EduSubjectService subjectService,String pid){ QueryWrapper<EduSubject> wrapper=new QueryWrapper<>(); wrapper.eq("title",name); wrapper.eq("parent_id",pid); EduSubject twoSubject = subjectService.getOne(wrapper); return twoSubject; } @Override public void doAfterAllAnalysed(AnalysisContext analysisContext) { } }
控制层的
subjectService是注入进来的,若用mybatis也需将dao层注入
public R addSubject(MultipartFile file){ //上传过来的excel文件 subjectService.saveSubject(file,subjectService); return R.ok(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了