1.引入依赖

之前测试EasyExcel已经引入过了

2.利用代码生成器生成结构

我们做的只需要更改代码生成器的数据库表即可

3.运行代码生成器

4.书写代码

1.controller

@RestController
@CrossOrigin
@RequestMapping("/eduservice/edu-subject")
public class EduSubjectController {
@Autowired
private EduSubjectService eduSubjectService;
//添加课程分类
//获取上传的文件,把文件内容读出来
@PostMapping("addSubject")
public R addSubject(MultipartFile file){
eduSubjectService.save(file);
return R.OK();
} }

2.service

@Data
public class SubjectData {
@ExcelProperty(index=0)
private String oneSubjectName;
@ExcelProperty(index=1)
private String secondSubjectName; }
public interface EduSubjectService extends IService<EduSubject> {
//添加课程分类
void save(MultipartFile file);
}

3.serviceImpl

@Service
public class EduSubjectServiceImpl extends ServiceImpl<EduSubjectMapper, EduSubject> implements EduSubjectService { @Override
public void save(MultipartFile file) {
try {
InputStream inputStream=file.getInputStream();
EasyExcel.read(inputStream, SubjectData.class,new SubjectExcelsListener()).sheet().doRead();
}catch (Exception e){
e.printStackTrace();
} }
}

4.Excel实体类

@Data
public class SubjectData {
@ExcelProperty(index=0)
private String oneSubjectName;
@ExcelProperty(index=1)
private String secondSubjectName; }

5.

最后关于这个监听器,我们要注意一个问题,因为代码的原因我们没法把监听器交给Spring管理

所以要把eduSujectService传进来

5.书写监听器

public class SubjectExcelsListener extends AnalysisEventListener<SubjectData> {
public EduSubjectService subjectService;
public SubjectExcelsListener(){}
public SubjectExcelsListener(EduSubjectService subjectService){
this.subjectService=subjectService;
}
//一行一行去读取excle内容
@Override
public void invoke(SubjectData subjectData, AnalysisContext analysisContext) {
if(subjectData == null) {
throw new onlineEduException(20001,"添加失败");
}
//添加一级分类
EduSubject existOneSubject = this.existOneSubject(subjectService,subjectData.getOneSubjectName());
if(existOneSubject == null) {//没有相同的
existOneSubject = new EduSubject();
existOneSubject.setTitle(subjectData.getOneSubjectName());
existOneSubject.setParentId("0");
subjectService.save(existOneSubject);
} //获取一级分类id值
String pid = existOneSubject.getId(); //添加二级分类
EduSubject existTwoSubject = this.existTwoSubject(subjectService,subjectData.getSecondSubjectName(), pid);
if(existTwoSubject == null) {
existTwoSubject = new EduSubject();
existTwoSubject.setTitle(subjectData.getSecondSubjectName());
existTwoSubject.setParentId(pid);
subjectService.save(existTwoSubject);
}
} @Override
public void doAfterAllAnalysed(AnalysisContext analysisContext) { }
//判断一级分类是否重复
private EduSubject existOneSubject(EduSubjectService subjectService,String name) {
QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();
wrapper.eq("title",name);
wrapper.eq("parent_id","0");
EduSubject eduSubject = subjectService.getOne(wrapper);
return eduSubject;
}
//判断二级分类是否重复
private EduSubject existTwoSubject(EduSubjectService subjectService,String name,String pid) {
QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();
wrapper.eq("title",name);
wrapper.eq("parent_id",pid);
EduSubject eduSubject = subjectService.getOne(wrapper);
return eduSubject;
}
}

最新文章

  1. git教程链接
  2. python多线程学习记录
  3. LeetCode之237. Delete Node in a Linked List
  4. linux的bash 终端操作快捷键
  5. 1204. Maze Traversal
  6. 【技术贴】VirtualBox给VDI格式的虚拟机扩容
  7. Oracle索引(B*tree和Bitmap)学习
  8. JAVA通过C3P0连接数据库
  9. UITextView 点return 隐藏键盘
  10. myeclipse激活+Aptana安装配置
  11. mongo批量更新
  12. 《C和指针》章节后编程练习解答参考——6.1
  13. Sagit.Framework For IOS 开发框架入门教程3:Start引导页及框架布局和隐藏事件的内幕
  14. js 手动插入meta标签和script标签
  15. Servlet抽取的问题-method传递问题+表单提交的问题
  16. webstorm验证码
  17. 浅析Mysql的my.ini文件
  18. 04_web基础(六)之请求转发与重定向
  19. dj 用户认证组件
  20. [转载] 什么是istio 官网内容

热门文章

  1. HDU1087:Super Jumping! Jumping! Jumping!(DP水题)
  2. uni-app在线引入阿里字体图标库
  3. 开启sftp服务日志并限制sftp访问目录
  4. wireshark抓包实战(一),抓包原理
  5. MODIS系列之NDVI(MOD13Q1)四:MRT单次及批次处理数据
  6. std::string::copy函数
  7. tf.train.GradientDescentOptimizer 优化器
  8. split(&quot; {1,}&quot;) 含义
  9. 使用ffprobe 查询wav文件信息
  10. break与continue对比