开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程列表接口】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11473
课程列表接口
内容介绍:
一、课程列表
二、实现接口
一、课程列表
在课程列表中,分为几部分:
首先是列表查询,里面有分页,还有条件查询。
实现条件查询要满足三个条件:
一是关注度排序,根据最新排序,根据价格做排序;
二是查询方式,还有一个课程类别,课程分类分为两级分类,第一行显示一级分类,第二行显示二级分类。
在这个过程中,点击一级分类会进行一个查询,而点击一级分类之后,界面会列出其二级分类。
比如:外语考试是一级分类,下面是外语考试里面的二级分类,再点击某个二级分类,可以进行另一次查询,所以会稍微复杂一些,要根据关注度最新价格做排序,另外根据一级和二级分类做查询。
例如:要做一个条件查询(带分页的课程),这一部分会略微复杂,把优惠写出,这是第一个功能;第二部分为当点击某一个课程,会用到课程的详情页面,在详情页面中显示数据比较多,比如会显示课程的分类—一级二级分类,这一部分有其封面、名称、价格、课程简介、讲师的名称头像、简介、课程大纲等等详细信息,要把所有数据都在页面中显示,就需要制做很多部分。
不管是我的分类、课程的价格,还是讲师、简介,根据课程ID都可以查询。
但是这些数据,每个课程只有一条记录,也就是一个课程只能一个封面、一个讲师、一个简介。
所以要写一段语句查询,第一部分写circle语句,查询信息,包括分类、简介、课程信息和讲师等等,第二部分使用之前写过的方法,把课程的章节小节列表完善。
此时进行分析,第一部分课程的条件查询有分页,第二部分课程的详细页面,包括在课程详细页面中,最后会整合阿里云的播放器,也会播放出来。
二、实现接口
1、创建 vo 对象,封装条件数据
@RestController
@RequestMapping(“/eduservice/teacherfront”)
@CrossOrigin
Public class TeacherFrontController {
@Autowired
private EduTeacherService teacherSERVICE:
@Autowired
PRIVATE EDUCOURSESERVICE COURSESERVICE:
import io.swagger.annotations.ApiModelProperty:
import Lombok.Data:
@Data
publicclassCourseFrontVo {
@ApiModelPrdperty(value ="课程名称")
private String title;@ApiModelProperty(value = "讲师 id ")
private String teacherId;@ApiModelProperty(value ="一级类别 id ")
private String sub jectParentId;@ApiModelProperty(value ="二级类别 id ")
private String subjectId;
@ApiModelProperty(value = ”销量排序”)
private String buyCountSort;@ApiModelProperty(value ="最新时间排序")
private String gmtCreateSort;@ApiModelProperty(value =”价格排序" )
private String priceSort;
}
2、编写 controller 和 service 相关代码
①条件查询带分页查询课程
@PostMapping (" getFrontCourseList/ {page}/ {limit}")public R getFrontCourseList (@PathVariable long page, @PathVariable long limit, @RequestBody (required = false) CourseFrontVo courseFrontVo){
Page pageCourse = new Page<> (page, limit);Map map = courseService. getCourseFrontList (pageCourse, courseFrontVo) ;
//返回分页所有数据
return R. ok(). data (map) ;
3、根据讲师 id 查询所讲课程
QueryWrapperwrapper = new QueryWrapper<> () ;
//判断条件值是否为空,不为空拼接
if(!StringUtils. isEmpty(courseFrontVo. getSubjectParentId())){ //一级分类wrapper. eq( column:" subject_ parent_ id' , courseFrontVo. getSubjectParentId());}if(!StringUtils. isEmpty(courseFrontVo. getSubjectId())) {
//二级分类wrapper. eq( column: " 'subject_ id", courseFrontVo. getSubjectId());
}
if(!StringUtils. isEmpty(courseFrontVo. getBuyCountSort())) {//关注度
wrapper. orderByDesc ( ..columns: "buy_ count" ) ;
}if (!StringUtils. isEmpty(courseFrontVo. getGmtCreateSort())) { //最新
wrapper. orderByDesc ( ..olumns: " gmt_create" ) ;}if (!StringUtils. isEmpty(courseFrontVo. getPriceSort())) {//价格
wrapper. orderByDesc ( .olumns: "price");
}
baseMapper. selectPage (pageParam, wrapper) ;
ListCourse> records = pageParam. getRecords () ;
long current = pageParam. getCurrent() :long pages = pageParam. getPages () ;long size = pageParam. getSize) ;long total = pageParam. getTotal();boolean hasNext = pageParam. hasNextO;//下一页boolean hasPrevious = pageParam. hasPreviousO;//上一页//把分页数据获取出来,放到 map 集 合
Map map = new HashMap<>();
map. put(" items" , records) ;map. put (" current." , current) ;map. put(" pages' , pages) ;map. put(" size' , size);map. put(" total", total);map. put (' "hasNext", hasNext) ;map. put (' 'hasPrevious' ", hasPrevious) ;//map返回
return map;
}
}