00:00
启下我们课程这个功能。大家看啊,当我现在点击课程这个路由或者超链接进入到是不是课程列表中啊,在课程列表中,它里边做到的有这么几部分,首先肯定是列表查询,然后里边是不是有个分页,在上面这个位置是不是有一个叫条件查询,而条件查询中怎么查的,大家看啊。这是三个条件。这一条件我觉得各位应该见过啊,其实做个就是排序,就是根据这个关注度排序,根据最新排序,根据价格做个排序,就是根据它做个order by排序啊,这是一种就是查询方式,然后里边。还有这个部分。这是什么呢?就是课程类别,或者说课程分类,而里边咱之前做到过啊,课程分类咱是不是有两级分类啊,所以说在里边的第一行示它的一级分类,在第二行显示它的二级分类,它里边有两部分,而这过程中,当我们就是点击一级分类会做个查询,而你点一分类之后,因为会列出一级他的二级分类,比如看我的例子中,现在是外语考试是一级分类,然后下面这个是外语考试里边的二级分类,然后咱们再点某个二级分类可以进行另一次查询啊,所以这个稍微麻烦点,咱要根据。
01:26
这个关注度最新价格做排序,另外根据一级和二级分类做个查询,比如咱要做一个条件查询,带分页的课程,主要在这部分稍微麻烦一点啊,这咱就会写出来,这是咱做的一会儿的第一个功能。然后这个做到之后,在里边还有第二部分。当我现在点击某一个课程,进入到的就是课程的详情页面,这详情页面中显示数据比较多,比如说一会儿咱这么显示啊,我在这里边呢,显示那个课程的分类就是一级二级分类,然后这部分有它的封面。
02:02
名称价格,大家看这个是不是讲师哦,然后这是课程的简介,这是讲师的名称头像,包括简介等等详细信息,然后最后还有一个叫课程大纲,咱们把这所有数据都在小页面中的显示,所以各位能看到啊,这页面数据是比较多的,所以咱显示需要做很多部分啊,建议咱们啊下面具体分析啊。大家看这数据。咱看上面这部分啊,不管是我的分类,还是课程的什么价格,封面,还是讲师还是简介,也就是我上面画的这部分,这些数据咱根据课程ID是不是都能查出来啊,但是这些数据每个课程是不是只有一条记录,就一个课程只能一个封面,一个讲师,一个介,所以这部分一会儿咱怎么做呢?一会儿我就要给各位写一段S扣语句,把这些查出来,这语句咱之前写过,类似一会儿咱会再快速写一遍啊,通过语句查出来。
03:01
然后这查出来之后还有这部分,这部分呢是什么呢?是课程里边的章节和小节,但是这个方法咱之前好像是写过的,当时咱做那课程分类有一个叫树形结构显示。就是各位同学是否记得啊,所以咱一会就调当时那个方法,把这查出来显示就可以了,在这个啊,稍微麻烦点,第一部分咱写个词后语句,把这些信息查出来,包括分类简介,课程信息和讲师等等,然后第二部分调咱之前写用的一个方法,把课程里边的章节小节列表给他做到啊,这是详情页面。这是我们做一个分析,就是第一部分课程的条件查询待分页,第二部分课程的详细页面,包括在课程详细页面中,最后咱会整合那个阿里云的播放器,把这个我们也会播放出来。这个啊,咱就分出来了,然后下面咱们把这功能我们就继续来写一下啊,看这功能我们该怎么做到。
04:00
那我们来实现啊。首先第一部分咱先实现课程的。条件查询带分页的这么一个功能,把这功能的方式我们先做到啊,咱先写接口,然后再写它那个前端。先实现接口,那这怎么做,咱们一步来实现啊,按照咱们之前的方式啊,就是咱们之前啊,应该使用那个讲师的件长件带分页,也写过课程的条件长件带分页,当时咱的写法就是我们是不是建立一个对象,用VO对象是不是封装咱的条件呀,所以现在咱也可以这么做,也就是说啊,我写一下啊,我们的第一步。咱们就是创建一个VO的一个对象,用它来封装我们的条件的数据啊,这是咱做的第一部分,那下面我来创建一下啊,来写一下。就是现在我来到我们这个edu里边,在edu中呢,咱找到这个antip中里边有个VO啊,但是为了区分,我给它换个名字啊,因为都写到一个里边,因为咱们不好不好找啊,给它换一个名字,假如我叫这个。
05:11
Front view啊,专门做咱们前台中的这个操作,在里边写一下,那咱们在里边写一个那个VO类,让他来封装咱们那个查询过来条件,包括你的分类,包括什么关注度啊,什么价格等等,把这个我们给他做到,那咱们写一下这个V类啊,那V类呢,首先我给它先起个名字,比如这个名字我就叫这个。Co。Front,这个view啊,就叫这个名字,就是前台的这个课程一个view对象,然后写完之后在里边加上咱们相应的属性啊,就是我们要查的那些值都写到里面去,那这些属性我就从课件中直接复制了。啊,就是里边的这些啊,给他拿过来。咱找到啊,就是第二个课程里边静态页面咱都整合过了,咱直接看功能,在功能里边,首先我们写一个view类啊,就是里边的这几个值,我把它咱都复制过来。
06:09
为了咱一会儿查询使用。咱给他拿到这里边啊,然后咱看一下啊,主要几个值,第一个课程名称啊,咱里边好像没有根据名称查的啊,我也给他写到这里,然后第二个是。讲师ID啊。根据这个查询,包括有一个一级分类,二级分类,就是主要咱用的应该是后面这几个,就是根据一级分类ID查询,二级分类ID查询,还有这个销量时间价格做排序啊,还多了两个啊,咱也放到这里,这是我们写了一个VO类,用它封装条件值在上面咱加上一个。Date注解生成它的get set方法啊,这是我们做的第一部分,这个做到了啊,然后这个做到之后,下面咱开始写这个controller,在CTRL中得到这个数据,然后咱们service中写这个就是条件查询,再分析这个过程。
07:01
那我们写第二部分啊。编写这个controller。和。Service。里边这个相关的代码,把这个我们给它写出来啊,那咱来写一下啊,就是下面呢,我们先来到这个CTRL里边,因为现在做的是前台的这种操作,所有在CTRL中咱们再来创建CTRL,专门做前台的课程的,这个就像内种,那我来创建啊,就仿照它用它我快速改一下啊。这个名字我就叫Co front controller。这个名字改完之后,里边的这个地址改一下,这个我们叫cos。让啊,然后下面啊,这些我先去掉,比如咱们重新来写。先删掉啊。包括这个啊,先发到这里。这是猪肉。然后写完之后,咱就写我们刚才说这个接口。条件查询带分页的这个课程列表功能。
08:04
咱们写一下啊,我写一个是post提交里边给它起个名字,这个名字我就叫get front。这个course。List。因为它要分页,所以分页中肯定有那个当前页,每页记录数啊,咱给他传一下一个配置,还有一个是limit。当前页累,记住数,然后写完之后下面写方法,我们写一个public are,加上方法名字get front Co在里边把这个当前页和每日技数给它取到啊,跟咱刚才写的一样,我就把这个直接复制了啊,一模一样,就这个写法。然后这个去掉之后,因为咱们现在还要做这么一个条件查询,要把那条件对象要得到。所以在里边呢,我就加上一个条件来加一个叫request的body。然后条件是咱刚才那个VO的那么一个类啊,我们叫这个cos。
09:05
Front VO,然后这叫cause front VO,把这个用request body得到就通过传递,如果你用body,这里边必须是后提交啊,这是咱们之前说过的啊,然后包这么写的话,还有一个地方咱需要完善,我给它完善一下啊,我加个require等于false。我说各位是否记得啊,咱之前写过它是什么意思呢?如果说你不加这个的话,那这里边必须要有值,没有值会报错,加上它之后里边可以没有值啊,就是它不是必须有,因为咱们条件可能没有条件直接就查全部,所以加个这一块等于false,这个做到了啊,做到之后下面我们写分页,分页中呢,首先第一部分肯定也是new类对象啊,跟这一样,就这个写法。这个拿过来啊,U这对象,然后这个对象改成我们现在这个名字叫edu Co。在里边这个名字改一下啊,叫这个配置costs。
10:06
然后里边传入当前页和没有技数,这传之后我们下面调下咱们思维中的方法,把这个数据我们给它最终查出来,那咱来调一下啊,在所里边一会咱写个方法,我就叫这个get。Co。Front list啊,就是这么一个方法,然后在方法中把咱这个配置对象,还有咱们这个得到的条件对象都给他传过去。因为咱们现在做分页需要咱们手动做个封装,所以咱们让他也是返回这么一个map集合,跟刚才一样啊,也是返回它。把这个返回。返回之后,最后我们做个蕊退把,这值就能给他。捋寸出来。这样的话啊,咱们把这个C了,我们就写完了,直接把一个map集合啊,大家把知道啊,就这个写法,注意request body或提交,然后写完之后,下面我们写这个service,在service中把这方法咱最终给他做个实现。
11:09
那咱们来写一下啊。这个方法条件查询带分页查询课程咱写的是前台的这个部分。这是service,然后找到它的实现类中,在实现类中把这个方法我们最终给他就实现下。里边的这个方法,那咱们啊,在里边把这个就最终写下,它的写法中呢,肯定还是调咱们base map中那个分页查询方法叫select配置。在此配置中传两个条件值,就是两个参数,第一个参数是配置cos,第二个参数是咱那个条件啊,那这条件需要咱们给他写一下啊,那我就来写下这个条件啊。嗯,我还是到这里边啊,复制一个啊。条件对,这里还没有条件啊,那我到刚才里边复制过来啊,那就少写,因为都一样的啊,里边有这个条件,那就new一个query rapper。
12:09
又一个R,然后快rap里边这位置我们叫e cos啊,就是它这个new完之后啊,咱下面在里边来做它的条件这个操作,但是条件怎么做,希望各位要知道啊,咱们还是来到页面中啊,我们看一下。因为大家看啊,就是现在呢,我第一次进入这个页面,咱是不是查全部就是没有条件,当我点击某一个条件是不是才做查序啊,但你看啊,这条件是不是有不同的组合情况,假如你看我目前条件根据外语考试价格做排序,或者我根据这个外语考试加英语四级加最新做排序,或者说我根据数据库做个查询,是不是都可以啊。所以他们过程中有不同的组合情况,咱要做这个条件查询,而条件值就是可能有也可能没有,所以咱们在这个代码中。
13:02
肯定要做一个判断,就看它值到底有还是没有,如果有的话再来拼接,条件没有的话就不做拼接啊,就是这么一个基本过程啊,那咱们在里边我们就来写一下啊。角的位置。判断条件值是否为空啊,如果说不为空。那咱就拼接这个条件,那咱们来一个判断啊,首先判断第一个我就从里边直接取了啊,然后判断方式用咱之前一直写的方式string。us.is empty啊用它来做到咱用的是润包里边的,然后在里边,比如咱先判断第一个条件,就是里边的这部分一级分类。在我这个view里边存的是那个一分ID啊,咱们就得到一分ID应该是它subject per ID,这是判断咱们的一级分类啊是否存在,如果说它就是这个值,如果说它不等于空,咱加个C,那我这位置就来拼接它的条件,根据一级分类ID我们做个查询,那我加个rapper,点上EQ里边加上那个一分类那个字段名字啊,咱找一下啊,到课程表里边一分类这个。
14:21
ID。然后后面加上它那个ID值啊,就是咱们取的这个值,呃,把这个我直接就给它取一下,或者你外边给它取出来再传一样的啊,我就这么写了,这是我们的第一个判断,然后这个判断之后咱再判断二级分类,包括其他值都是一样的,我用它快速复制改一下啊,第二个二级分类。那我们取这个就是值叫get subject这个ID啊,这是二级分类。然后二级分类呢,咱要判断的这个名字叫subject下线ID就这个就换一下,然后这里边把这方法咱也改一下,改成我们这个名字,这是我们的第二个做了判断啊,然后判断之后呢,下面还有三个东西,就是还有这三个东西,那这三个要怎么做呢?给大家说一下啊,第一个你要知道这三个做的其实不是做查询,它做的是不是一个排序啊,假如我点价格跟价格是不是做个降序,点最新,根据最新做个降,就是谁最新在第一个显示。
15:27
点关注度,谁关注度高在第一个显示,所以咱有这三个资源是为了做排序,那咱怎么做呢?我这里强调啊,一会儿咱会在前端做个处理,如果咱点它的话,往里边传个值,比如我在后端判断里边有值就排序,里边没有值就不排序,咱的目的不是为了得到值,是为了看它有没有值,能不能做排序,你点价格,比如里边穿个一,咱们判断有值就排序,它里边如果为空就不排序啊,所以这个做的就是三个排序。那我们来写一下啊排序,首先我们写第一个排序啊,就是写它那个叫做啊,看见view对象中啊。
16:06
来写第一个。是这个销量或者关注度,关注度用销量做个操作,那在里边我们还是这种结构。判断一下啊。这叫关注度。或者说叫销量,然后关注度里边我们就是直接取它那个方法get这个by count so,如果说这里边的有值的话,就是它不等于空有值,那咱根据这个就是关注度,或者说这个购买量,我们做个排序。那咱做个排序啊,排序用的方法叫order by DC,加上咱那个就是字段给它排一下可以了,那字段到里边找一下,就跟这个购买这个作为关注度啊,用它叫by count。这个做到了啊,根据它排序,然后下面两个最新的,包括价格跟它一个意思啊,那那两个我就从课件中复制了啊,因为代码都差不多。
17:06
就是里边的。这两个啊,用它我们也是判断是否有值,如果有值的话,咱就给它做个排序,把名字改一下啊。就是这个是你的那个。就是最新的一个排序,就是时间,这个排序,包括这个位置,我们叫rapper。这个啊,就根据时间,然后最后一个根据是你那个叫价格做排,就是谁最高在第一个啊做一个降序排列。这叫rapper。这是根据。价格,所以这样的话,咱们把这个条件判断做到了,分别判断出它的一级分类,二级分类,关注度,最新还有它的价格啊,包括都是判断不等于空,咱做条件的一个封装,然后都做完之后,咱就调这方法得到我们的数据,而调方法之后,它的数据都会在我们这个配置cos里边,咱通过它把这取出来,最终返回到也是map集合,跟刚才一样。
18:06
啊,那这个代码我就从刚才里边咱就复制了啊,跟刚才一模一样的啊,给他拿过来啊。也就是。这段代码啊是一模一样的,那我把它我就直接复制出来了啊。咱用它快速改一下啊,这重复的我就不再敲一遍了啊。写到这个位置啊。把里面一些名字咱给它换一下啊呃,这个叫配置P。然后这里边我也叫配置PMO。包括这个叫edu cost。这个名字啊,这样的话,咱把它就最终完成了,就是做了一个课程的条件查询待分页啊,主要里边做了这些判断啊,所以各位把这个能快速做到啊,咱这些做的目的值为了排序后面,咱在前端如果他要排序,咱会排个值,里边如果有值,那咱就。排序啊,没有指就不排序。
19:02
完成啊。所以咱们做了这么一个基本的结构啊,关于这个controller,还有它这个service。我就把CTR了,给大家截个图啊,就这个。直接拿过来啊,所以这样的话呢,咱就把这个接口我们就完成了啊,各位能给他快速做到,然后接口写完之后,咱下面肯定还是整合它这个前端,在前端把这做到,但是前端我先说明啊,它要稍微麻烦一点啊,咱先大概浏览一点,然后一会儿我给他写出来啊,先看一下我的课件中找到课程列表,咱照前端前面都简单,咱肯定还是。定义方法,然后咱们接口中做调用啊,这里边咱是用普通方式调啊,然后里边怎么做到,你看我这写法中啊,首先咱这个位置可以查询出所有的课程,就是第一次查,你查第一页,然后后面做分页,然后一个那个分页的一个切换,刚才一模一样,但是这个过程中呢,因为咱要做各种的排序,而排序里边这是一级分类,这是二级分类,所以咱要先把这个效果做到,而这个效果类似于咱之前做那个二级联动,就是它就是二级联动,只说不是用下列,不是用下列表显示。
20:18
这是所有一分类,点某一分类,显示它二级分类,这得要做到,然后在里边每次点的话需要传这个相关,你点那个值,最终调我们的方法做查询,包你看我里边的写法啊,这个是点击一级分类,然后里边你需要给它赋值,最终调方法查询,包括这是做那个联动,这是点二级分类,你需要赋值做查询,这是点购买量,这点更新时间,这点价格,你做赋值,然后做查询,在它里边需要写一些前端,然后这过程中还涉及到一些页面这种东西啊,页面不需要我们写,咱直接复制,主要咱能把这个扎va勾做到啊,所以这个咱一共要写到啊,就根据里边各种条件做一个查询。
21:02
咱要用这种方式做到里边要写多个方法,都是前端的部分。所以咱们啊,现在先把这个接口我们先做到啊。我这个保存。
我来说两句