整章内容以教师管理模块进行操作模板,不涉及相关代码,单单只是对整个操作流程进行梳理分享,以便于自己进行项目编写的时候可以更好的上手。
一、前期准备工作,搭建整个项目框架
1、首先创建一个mevan项目,导入pom依赖,特别注意加入父工程跟子工程中间用pom跟modules进行规则划分
2、导入数据库信息
3、导入application.yml文件
4、在测试中导入代码生成器,结合数据库更好更方便的进行代码生成
二、具体模块划分
注意事项:
1、整个项目使用mybatis-plus,在pom文件导入的过程中,运用插件相
关信息,所以对基本的增删改查的操作不需要在xml文件中另行增加。
这样大大减少了代码的重复度,牢记遵循规则>配置>代码的整体规范
2、注意一定不要忘记在所有实体类中添加策略:@TableField(fill = FieldFill.INSERT)。这个特别重要,在时间中没有参加策略,相当于不会进行自动生成,代码运行会报错
公共模块插入:
- Swagger:创建公共模块common,创建子模块base,创建swaggerconfig,用于整个项目后端接口进行统一管理。注意controller调用的过程中,要在pom中导入swagger相关依赖的同时,加入注解跟扫描包组件。
- 统一定义数据状态码跟返回数据格式:首先在common中创建common.util模块,然后创建定义数据状态码跟返回数据格式的两个包,粘贴具体代码即可,第三在业务模块中调用相关配置,把接口方法的返回类型都改成R。
- 在遇到需要运用例如阿里云OSS或者是阿里云视频点播导入项目中的时候,往往单纯建立新的端口号就可以在swagger中端口就可以进行实现,但是特别注意,在前端中要用到nginx!!!负载均衡
一、讲师管理模块
1、讲师列表展示:简单的service调用list方法,进行查询,返回json数组的形式,通过var调用List<>集合,中间填入定义的实体类即可成功。由于这个功能是数据的请求,所以使用Getmapping形式进行接口使用
2、讲师逻辑删除:也就是根据id进行删除:首先在config中要配置逻辑删除插件,第二在进行操作的实体类上加入逻辑删除注解@TableId,第三由于是使用查询id进行删除操作,所以接口调用的方法使用@DeleteMapping括号内加id的方法进行调用,第四具体实现方法依旧是使用service.removeByid的方法进行调用。
3、分页查询:首先在config中配置mp的分页插件,然后用GetMapping调用接口,具体到当前页码跟每页记录数(多用page跟limit调用),同时可以用@Apiparam跟@PathVariable对其进行含义赋值。具体代码呈现:首先调用方法类创建方法,注意在service扫描下,分页的功能就是用page来进行实现的。第二运用service.page(),调用方法的时候底层封装,把分页所有的数据封装到对象中去,第三,通过对象.getTotal封装记录数,对象.getRecords封装list集合,最终return返回数据即可。
4、条件查询加分页:具体方法跟分页查询类似,中间添加了wrapper来定义条件,通过mybatis的动态sql,结合if判断语句,将想要查询的数据放到wrapper中,最终还是通过service.page进行调用实现。
5、讲师添加:首先由于是对数据信息添加操作,由此使用Postmapping的方法进行接口对接,简单的运用了service.save的方法进行添加方法的使用。但是要注意的是,必须使用@Requestbody的方法来对相关类进行接收数据,然后用post的方法进行提交。
6、讲师修改功能:分为两个过程,首先进行id查询,然后再进行修改。首先getmapping接口中简单的servcie.getByid将数据查询出来。然后postmapping接口中用@Requestbody对方法类进行接收数据,然后用service.updateByid进行修改封装即可。
二、阿里云oss操作模型
1、创建相关模块,导入pom依赖跟yml配置文件,yml文件中配置自己阿里云中相关的id值
2、创建servcie跟controller,导入官方文档中的模板就行
3、创建常量类,读取yml中配置的相关信息
4、启动测试,就可以导入文件进入阿里云
注:默认情况下,swagger属于自定义早就安装完成了的
- 课程分类管理
一、增加课程分类:
- 使用EasyExcel操作excel进行读写操作:注意重点操作的重点,在于一级分类跟二级分类的显示跟操作。在idea实现过程:第一,引入相关easyexcel依赖。第二,使用代码生成器生成课程subject课程分类代码。第三,用@Data定义实体类,创建第一跟第二级分类的实体类,对应好excel中的关系。第四,创建监听器实现操作。
监听器代码编写:
- 监听器继承实体类的集合AnalysisEventListener<>
- 因为监听器listener不可以交给spring进行管理,故需要自己new,自己public一个实体类的service,并进行有参跟无参构造
- 在实体类中,新建一级跟二级分类,onesubject跟twosubject
- 首先先判断一级分类跟二级分类能不能重复添加:首先在private括号中传入自己new的service跟实体类中定义的方法名。第二,通过QueryWrapper<>方法调用wrapper,用wapper.eq()来进行添加条件来进行判断。第三,调用service.getone的方法调用,最后返回。同理二级分类一样的方法。
- 判断一级分类跟二级分类是否重复再进行添加:调用定义的private方法,判断一级分类是否重复,为空的话,通过service.save进行创建,然后获取id之后,对二级分类进行添加。
- 课程页面显示:
- 总体来说,目的在于构建一个树形结构的一个展示效果,所以还要在serviceimpl中进行修改调用,故正常getMapping请求,定义list集合,service.方法跳转到service中,然后再impl中实现方法。
- Impl中具体过程:先查出一级分类跟二级分类,然后分别进行封装:
- 用QueryWrapper<>来new一个对象
- 调用wrapper.eq()将数据库的值调入进wrapper
- 用basemapper.selectlist(wrapper),将wrapper的值,也就是数据库的值传进去。从而实现一级分类的查询,同理,即可实现二级分类的查询
- New一个Arraylist<>集合,用于存储最终的封装数据
- 封装一级分类跟二级分类:注:最终目的是为了让前端可以更好的调用接口,将List<EduSubject>onesubjectlist转换成List<OneSubject>finalsubjectlist具体操作:
- 用for循环遍历整个onesubjectlist
- 用edusubject=onesubjectlist.get(i)得到每一个one中edu的对象
- New一个onesubject,将edusubject中的值获取出来,传入onesubject,再用beanutil.copy()将edu中的值复制到one对象中去
- 最终用finalsubject.add(one)的方法,将one的值封装到final的list集合中去。
- 同理,实现二级分类的封装
六、最终树形接口的实现
- 课程管理(核心思想是运用实体类结合数据库定义的数据传入serviceimpl,在里面结合mybatis-plus进行操作)
- 课程添加
- 编辑课程基本信息:
- 运用代码生成器,结合course数据库生成相关代码
- 在实体类中创建Vo,复制进去根据数据库的具体数据,注意在时间方面加入策略语句
- 编写controller:注意private()调用@Requestbody调用vo中的实体类。然后service.saveCourserInfo创建service类,注意将vo实体类中的数据放入service.saveCourserInfo中。
- 编写service类,在impl实现service类的方法。首先将实体类数据对象转换成educourse对象:用BeanUtils.copyProperties(),进行转换封装对象。然后用basemapper.save添加方法,将educourse数据放入,实现添加基本信息功能的实现。最后通过eaducourse.getID()获取添加之后课程的id,用于下面向课程简介表调用数据做准备。
- 向课程简介表中添加数据:特别注意课程表中并没有课程简介这一东西,要在添加的过程中添加入课程简介,就要调用课程简介的service信息操作。首先注入@Autowired中课程描述的service。第二,new一个courseDescription对象,用service.save方法进行添加。第三:将course的实体类中的数据放入其中就可以实现。最后返回id值可。
- 创建课程大纲
- 添加章节接口:
- 代码生成器生成代码
- 创建post接口,添加@Requestbody加入章节的实体类数据
- Service.save方法实现
- 修改章节接口:老方法,先根据id查询,再进行删除
一、代码生成器生成代码
二、创建get跟post接口,添加@Requestbody加入章节的实体类数据
三、分别使用service.getId跟service.updateByID进行查询id跟修改操作
3、删除章节:根据id删除章节,但是注意要判断有没有小结!
一、@Deletemapping方法创造接口
二、service.delete自建(导入实体类)
三、调用service转到serviceimpl,并实现方法
四、serviceimpl中具体实现:首先querywrapper<小结实体类>查询小结中内容。第二用wrapper.eq对条件进行添加。第三将添加数据中的wrapper用service.count进行封装,count可以直接查出想要的值。最后,if条件判断即可。
4、添加小结操作; 与增加章节同理
5、修改小结接口:与修改章节同理
6、删除小结:前几步跟删除章节类似,但是并不需要最后进行判断,也就是第四步的第三小步,直接进行basemapper.delete(mapper)实现即可
- 发布课程(多是前端方面)
- 课程状态修改:依旧是先根据id查询,再进行修改
- 查询经典三步走,controller加service加impl,basemapper调用查询方法
- 首先new一个方法类,然后.setId(id),传入查询的id进行定位,第三用.setstatus()导入想要修改的状态。最后service.updateByid(实体类)实现修改课程状态。
五、阿里云osss图片后端接口实现
一、阿里云oss创建oss服务,创建秘钥
二、创建配置文件,新建端口号跟秘钥
三、导入oss相关依赖
四、controller加service加impl操作,impl写入文档内容即可
六、阿里云视频点播后端接口实现:类似于oss操作
七、登录login后端接口实现:创建与前端交互的接口,与前端进行对接
八、Nacos调用:
一、下载Nacos压缩包,解压cmd运行
二、导入pom依赖跟yml文件信息(调用端跟被调用端都需要加入)
三、启动类中导入注释,区分调用端跟被调用端
四、微服务具体实现:
1、调用端创建client包,创建接口,加@Feignclient注解注入被调用端,然后可以使用被调用端接口的方法进行操作,具体代码看实例
八、Hystrix:豪猪哥的应用
一、首先确定豪猪哥是熔断器,当项目出现错误时进行熔断
二、操作:
1、pom跟yml文件导入
2、在client包中创建熔断器的实现类
3、client中创建接口的注解
4、测试实现