在线教育项目-day05【课程分类管理-添加课程分类】
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;
}
}
在线教育项目-day05【课程分类管理-添加课程分类】的更多相关文章
- 黑马在线教育项目---34-37、webuploader实现用户头像的异步上传
黑马在线教育项目---34-37.webuploader实现用户头像的异步上传 一.总结 一句话总结: 启迪:可以多看学习视频,在看电影看电视的时候看的确是不错的选择 1.关于软件的发行版本? 第1阶 ...
- 黑马在线教育项目---15-16、datatables插件
黑马在线教育项目---15-16.datatables插件 一.总结 一句话总结: datatables插件也比较好用,引入好插件的js和css后,核心代码也就是插件的初始化,如果要修改配置可以百度 ...
- Django——在线教育项目总结
项目简介 在线教育平台 软件依赖: WEB框架:Django(1.11.7).Django REST framework 前端框架:Vue(2.5.16) 数据库: MySql.redis 支付平台: ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-1.SpringBoot整合微信支付开发在线教育视频站点介绍
笔记 第一章项目介绍和前期准备 1.SpringBoot整合微信支付开发在线教育视频站点介绍 简介: 课程介绍,和小D课堂在线教育项目搭建开发 1.课程大纲介绍 2.微信支付项 ...
- 第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表
第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表.课程机构表.讲师表 创建名称为app_organization的课 ...
- 第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表、课程章节表、课程视频表、课程资源表
第三百七十四节,Django+Xadmin打造上线标准的在线教育平台—创建课程app,在models.py文件生成4张表,课程表.课程章节表.课程视频表.课程资源表 创建名称为app_courses的 ...
- 第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表、课程评论表、用户收藏表、用户消息表、用户学习表
第三百七十六节,Django+Xadmin打造上线标准的在线教育平台—创建用户操作app,在models.py文件生成5张表,用户咨询表.课程评论表.用户收藏表.用户消息表.用户学习表 创建名称为ap ...
- 【Python】通过python代码实现demo_test环境的登录,通过csv/txt/excel文件批量添加课程并开启课程操作--(刚开始 项目 页面 模块 元素这种鸟 被称作pageobject 等这些搞完 然后把你的定位器、数据 和脚本在分离 就是传说中那个叫数据驱动 的鸟)
一.1.通过csv文件批量导入数据 1 from selenium import webdriver from time import ctime,sleep import csv #循环读取每一行每 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-4.在线教育后台数据库设计
笔记 4.在线教育后台数据库设计 简介:讲解后端数据库设计 ,字段冗余的好处,及常见注意事项 1.数据库设计: er图: 实体对象:矩形 ...
随机推荐
- fstream
fstream file("b.txt", ios::in|ios::out|ios::app); mode ate - seek to the end of stream imm ...
- IE不支持sessionStorage问题
IE8及以上版本是支持的,如果你的项目在IE8及以上打开报错: 那是因为:页面要放在服务器上才能有效!!!!!!!!!!!!!!!!!!!!!!!!
- Mysql数据库下载以及安装(至安装成功cmd可访问)
主要整理了一下Mysql安装的过程 安装的具体步骤见: https://blog.csdn.net/weixin_43465312/article/details/89897580?ops_reque ...
- 【php】面向对象(三)
知识点关键词:FSCICATS一. f => final: a) 是一个修饰符,用来修饰类和成员方法 b) 使用final修饰符修饰的类不能被继承,使用final修饰符修饰的成员方法,不能被重写 ...
- Linq下有一个非常实用的SelectMany方法,很多人却不会用
在平时开发中经常会看到有些朋友或者同事在写代码时会充斥着各种for,foreach,这种程式代码太多的话阅读性特别差,而且还显得特别累赘,其实在FCL中有很多帮助我们提高阅读感的方法,而现实中很多人不 ...
- MySQL入门,第七部分,单表查询
首先我们需要了解一下整个数据库的结构 其中Student表中Sno为主键.Study表中Sno和Cno合起来做主键.Course表中Cno为主键 其创建脚本如下: #----------------- ...
- javascript入门 之 ztree(二 标准json数据)
1.代码 <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - Standard Data </T ...
- Java中的垃圾回收算法详解
一.前言 前段时间大致看了一下<深入理解Java虚拟机>这本书,对相关的基础知识有了一定的了解,准备写一写JVM的系列博客,这是第二篇.这篇博客就来谈一谈JVM中使用到的垃圾回收算法. ...
- IDEA我常用的快捷键
IDEA快捷键 全屏编写代码:Ctrl+Shift+F12
- 2019-07-25【机器学习】无监督学习之聚类 K-Means算法实例 (1999年中国居民消费城市分类)
样本 北京,2959.19,730.79,749.41,513.34,467.87,1141.82,478.42,457.64天津,2459.77,495.47,697.33,302.87,284.1 ...