开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程列表接口】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11473
课程列表接口
内容介绍:
一、课程列表
二、实现接口
一、课程列表
在课程列表中,分为几部分:
首先是列表查询,里面有分页,还有条件查询。
实现条件查询要满足三个条件:
一是关注度排序,根据最新排序,根据价格做排序;
二是查询方式,还有一个课程类别,课程分类分为两级分类,第一行显示一级分类,第二行显示二级分类。
在这个过程中,点击一级分类会进行一个查询,而点击一级分类之后,界面会列出其二级分类。
比如:外语考试是一级分类,下面是外语考试里面的二级分类,再点击某个二级分类,可以进行另一次查询,所以会稍微复杂一些,要根据关注度最新价格做排序,另外根据一级和二级分类做查询。
例如:要做一个条件查询(带分页的课程),这一部分会略微复杂,把优惠写出,这是第一个功能;第二部分为当点击某一个课程,会用到课程的详情页面,在详情页面中显示数据比较多,比如会显示课程的分类—一级二级分类,这一部分有其封面、名称、价格、课程简介、讲师的名称头像、简介、课程大纲等等详细信息,要把所有数据都在页面中显示,就需要制做很多部分。
不管是我的分类、课程的价格,还是讲师、简介,根据课程ID都可以查询。
但是这些数据,每个课程只有一条记录,也就是一个课程只能一个封面、一个讲师、一个简介。
所以要写一段语句查询,第一部分写circle语句,查询信息,包括分类、简介、课程信息和讲师等等,第二部分使用之前写过的方法,把课程的章节小节列表完善。
此时进行分析,第一部分课程的条件查询有分页,第二部分课程的详细页面,包括在课程详细页面中,最后会整合阿里云的播放器,也会播放出来。
二、实现接口
1、创建 vo 对象,封装条件数据
@RestController
@
RequestMapping
(“
/eduservice/teacherfront
”)
@
CrossOrigin
Public class
T
eacher
F
ront
C
ontroller
{
@Autowired
p
rivate
E
du
Te
a
c
he
rS
ervice
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) ;
List
Course
> 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;
}
}