00:00
下面呢,我们开始实现点播管理模块的具体功能,首先呢,咱先做第一个功能,完成课程的列表功能。具体说就是实现一个条件查询带分页的课程列表功能,那咱们功能中首先先编写接口,然后最后整合前端,把功能进行实现。在我课件中写到这里边呢,是一个效果图,咱根据课程类别,标题,包括讲师进行条件查询,最终进行分析显示,那下面呢,咱们先开始编写课程列表的接口,那咱们来写一下。然后这个过程呢,咱们首先找到我们的CRL部分,CTRL里边我们找到cos CR了,在里边进行实现,那controlrl中第一个我先把它的路径改一下,跟课件中保持一致,放在咱们前端编写。这个先拿过来,这是我们写的路径,Ain vod cos,然后别忘记啊,在CTRL上边加上这么一个跨域的这么一个注解,咱之前提到,然后写完之后在CTRL里边我们要注入service。
01:10
做一个注入。Private。Service。注之后,下面咱们开始写这个方法就是点播课程的。列表的这个方法,那方法中首先加上注解。A片。我写一下啊,加这个注解。API用S中文这个提示。点播课程的列表空档,然后下面加上我们的具体方法,咱们就写上这么一个get提交。加上我们的名字,因为咱要做这个条件查询带分页,所以这里边要做分页,肯定要传入你的当前页,还有你的页记住数,那我就直接传下啊,当前页比如起个名字,我们叫这个配置,每页记住数,我们起个名叫这个limit,咱们通过战符的形式传过来,下面加方法。
02:10
Public,然后方法起个名字就叫这个。就是的。这样的话把这结构完成,咱们先一个。先不让他报错,OK,现在这个方法完成,完成之后在里边我们写代码。首先第一个得到当前页和每月计数数的这个两个值,加上注解pass valuable,我们用long类型第一个当前页。然后第二个。每页显示的技术数。Limit,呃,这写错了啊,叫pass valuable,然后加上之后呢,因为咱有条件,条件呢我这里边专门给位提供了一个view对象VO对象名字叫这个cos宽VO里边封装咱的条件,这个对象我们看一下啊,有你的讲师ID,课程专业,其实就是课程分类啊,包括你的一级,比如说我的后端开发下面的Java,还有你的课程标题,根据这几个条件我们做查询,所以用view对象景封装。
03:16
然后写完之后,下面我们继续往下写,因为要做分页,所以咱们溜上这么一个配置对象。加上cos,然后起个名字我就配置,等于上一个配置里边传入你的当前页,还有你的每页的记数,这是第一个,然后完之后咱们调方法,这方法我在S中咱们做个实现,我们写个名字叫饭的配置。Cos里边传入这个配置这个对象,另外有咱那个条件对象,最终它返回咱们分页之后那个内容啊,但是分页之后呢,因为咱们要显示很多内容,这内容中呢,除了咱们这个信息之外,可能还有别的信息,所以各位啊,说一个原则。
04:07
如果说啊,你在查询的时候,你不好确定到底要返什么类型的数据,咱为了方便,一般的经常返回这个类型,就是一个map类型,因为map的好处是什么呢?取值放值都方便,也就是说如果你能确定,那就反映你的具体类型,如果你不能确定,咱一般建议返回map类型,因为它特别方便,不管你是取还是放,都会很简单,所以我现在就要反映一个外部类型。这个给他加上啊。Key是string y6就加一个object,然后最终把map做个退,咱后面把数据都放到map中,最终进行返回,所以以上是咱编写的CTRL部分条件查询,待分页这部分完成,完成之后,下面呢,我们在里边把这方法咱们先创建出来。
05:04
创建之后来到它的实现类里边,最终把这方法我们进行一个实现。点播课程的列表功能条件查询,再分页,那下面咱们把这功能来写一下,咱们看怎么来做啊,就是这个做法,咱之前写过很多,首先第一个cos query view里边有咱们需要那些条件的值,那下面咱们来做这个过程。我先写一下步骤,然后咱们进行实现,首先第一步我这么做,先获取一下我们这些条件值,就是通过这个cos VO取到,然后取到之后第二部分咱就来判断条件值是否为空,如果不为空,咱来封装这个条件,用query rapper进行封装,然后封装之后咱到下一步操作。调用就是MP终的方法实现这个条件查询分页的这么一个过程,然后最终我们进行数据的这个封装。
06:09
写一下啊,最后封装我们的数据,因为数据咱返回是一个map集合,所以把数据都封装到这个map集合中,最终我们进行这么一个对退。这是我们要做的这么一个事情。然后这个过程中呢,有个细节,就是封装的细节,咱们先说一遍啊,一会代码会有体现,大家看一下啊,我们一会儿要查的话,肯定是查这个扣子,这个课程表,而在课程表里边呢,大家看啊,里边有这么一个特点。我们看啊,课程表里边有一个叫讲师ID,还有一个叫课程分类ID,而这里边存的只是ID,所以咱需要把这个ID对应的名称是不是要取到,一会儿咱会做封装,封装之后把名称取到,然后最终我们进行最后的处理啊,这咱们马上来做到,所以目前把这个基本结构我们就写出来了,那下面呢,在里边咱就具体写下这个代码,然后代码中我们最终做一个实现。
07:13
那咱们来看一下啊,首先第一个我先获取咱们这些条件值,通过cos块取到,我来获取一下啊,它的第一个值,咱们得到这个title就是课程的名称。然后我再得到第二个,第二个值呢,咱就得到这个叫ID,我们课程那个分类的ID啊,其实分类呢,咱们提到它有两层分类,一层二层,比如第一层是后端开发,第二层Java,这一得到是以那个第一层分类,另外还有第二个这个。这个分类啊,就是第一啊,这是第二层,这是第一层,就是第一层和第二层的分类法律得到啊,为了防止我们说错啊,给它加个注释,这是第二层那个分类,然后这个是我们的第一层分类。
08:06
把这个咱加个注释。第一层分类,然后这个之后呢,里边应该还有一个值是我们那个讲师的那个ID,我们得到一下啊teacher ID,咱要根据它所属的讲师进行查询,所以以上把条件值得到了,得到之后咱们做一个非空的判断,用query rapper进行封装。那我写一下啊,加上这个。Co,然后起个名字rapper,上一个query rapper下面做个判断,那判断呢,我就写一个,剩下的我就复制了,因为过程都是一样的,比如咱们判断第一个啊,就是那个title值,咱们通过。里边的方法叫empty,加上这个叫title。咱判断如果这个值不等于空,那咱就封装条件rapper里边我们用个模糊查询了,加上那个课程的名称。
09:09
咱们看一下啊,课程名称是这个title或者标题。里边加上title,所以这是我们的第一个判断,后面几个值判断跟它一样,后面的判断我从课件中直接复制了,也就是里边的这么几个值,把这个咱直接复制过来。到这里。这样的话呢,我们的第二步完成了,判断条件值是否等于空,不等于空,咱来封装条件,然后完成之后,下面进入到第三步,第三步咱们调用map中的方法,这个方法叫select配置,进行条件查询,带分页里边传入配置,P是咱们CTRL里边传过来这个对象,当时咱应该是new的对象,别忘记里边传参数。
10:00
然后这个之后下面加上一个叫rap,最终返回一个结果啊,当然也可以不返回,用这个配置都可以取到,咱就给它返回下,我叫配置死。所以现在这部分就完成,完成之后呢,因为最终啊,咱的数据要放到map中,所以我通过配置S把里面需要的数据给它取出来,为了一会儿咱们封装方便,那我取一下啊,配s get records,得到里面那个集合的部分,这个集合比如就叫这个list。然后除了这个之外,里边还有其他值,咱都得到一下啊,Pages get total,我们里边的总记录数就一共有多少条记录啊,咱再得到一个配点,Get配置。总页数一共你有多少页,那咱给他改个名字啊,发现咱们操作。呃,这个咱就叫这个。Total配置总页数,这个我们叫total count总记录数。
11:05
另外啊,里边应该还有其他值,咱就先得到这几个,后面需要咱再从里边获取到,所以现在值都可以了,然后值得到之后,最终呢,把这些值咱们封装到这个map集合中,最终进行返回,那我来封装一下,在里边我先一个map集合。就一个哈希map,然后像map中放它的数据,通过put往里边放就可以了啊,这个过程我就复制了啊,就往里面put里边这几个值,咱目前放这么。三个值,第一个总记住数,第二个总页数,第三个你数据这个集合,然后最终别忘记把map返回,不要履存档。以上咱就把这个接口就初步做到了,这咱就完成了,但完成之后刚才提到啊,里边有一个细节,我这里写一下啊。
12:03
因为咱们现在查出的数据里边呢,有这么几个ID啊,就是有这么几个ID写的通俗点啊,比如说里边有这个讲师的ID,有你的课程分类的ID。分类ID包含你的第一层的ID,还有你的第二层的这个ID。但是我们现在这里边最终显示的话,肯定不是显示ID,包括大家看表里边啊,你看啊,这是讲师ID,这是第一层第二层ID,咱们显示肯定不是显示ID,是显示ID对应的是名称了,所以咱下面来做个事情,就是获取一下这些ID对应的名称,然后进行封装,为了最终的显示进行准备,所以下面再来做这个事情。那这个怎么做,咱们先看一下啊,Cos尸体类中有个地方你看啊。
13:04
上面有很多的属性,然后继承了一个叫贝斯emptyt,在贝斯NT里边呢,有这么一个类型,大家看一个map类型,Map上面加了一个注解,这咱之前讲过。各位是否记得这朱体什么意思,他就表示啊,表里边为这个字段,但是这个属性我们需要,所以咱们后面怎么做,咱根据ID把名称渠道,然后放到这cos中,这个拍的map中,为了最终显示这专门用于封装需要的一些其他数据,咱就像这里边放数据所,下面咱们把这个代码我们进一步写一下啊。也是咱们之前一直说的思想,从表中查出的数据往往不能满足咱的需求,咱需要把数据再做进一步的处理,所以下面我就做进一步的处理。那怎么处理呢?这里边有个集,我们做法就是便利合得到每个对象,把每个对象中那个ID的名称、渠道再进行封装,那在下面做个便利。
14:07
啊,这个我就用这个方式写了,点上加一个名我然后加上一个拉姆的表达式。在里边咱们一会儿起个方法,这些方法,比如起个名字啊,就叫get这个名称。根据我们这些ID,然后里边把item传进去,Item就是每次你变之后那个对象,呃,这个名字随便起啊,根你的习惯,我习惯叫item,你可以叫别的名字。然后最后咱就来。做这个事情啊,我下面建这个方法,根据ID把它这些名称我们来取到,那我们来写一下啊。呃,这个叫扣子。那咱们看怎么做啊,首先第一个我先写步骤啊,先根据。
15:01
这个讲师的ID获取讲师的名称,然后咱们再根据课程分类ID获取课程分类的名称,分类ID有它的第一层,还有第二层,咱们都需要给他得到,那下面咱们把这个就来写一下,因为要操作讲师和课程分类,所以咱们把他们那个service都注进来,为了咱们能进行操作。那我来注入啊。首先注入第一个。Private。Teacher。Service操作讲师,再注入课程分类。Subject。Service这个注入,然后下面咱们写这个代码,第一个先根据讲师ID进行查询,那我们第2SERVICE里面的方法。Getd传入讲师ID,就是这个teacher ID最终得到是这个讲师的这个对象teacher,咱们从里边把它的名称取到啊,但是这里边我们最好做一个判断,如果说查不到,那咱就不需要封装,就是这个teacher不等于空。
16:15
咱给他判断一下啊。他。不等于钠。这里边一个原则,各位记住,如果说咱们从数据库中查出来的数据,后面要使用,咱们要做个非空判断,如果数据没有,那后面肯定不能用,所以讲师做个非空判断,非空判断之后,咱们从里边把它那个名称取到,然后取到之后最终封装到咱这个cos对象中去。刚才咱们看到啊,在里边有个pro,就是个map集合,像里边我们直接放这数据,然后咱起个名字叫teacher name,它的值是这个name,这样的话我们就完成封装,然后这个课程分类的名称取法跟他应该是一模一样的,那这部分啊,我们来写一下。
17:08
咱们调用service里的方法,这方法叫写一下啊get。ID根据行查询,然后ID,比如现类get类D啊,这得到是的第一层分类。那我起个名字啊叫。然后同样做个非空判断,从里边取值,再进行这么一个处理,咱们写下啊。就这位置就是里边的subject y,如果说它不等于那。呃,在这里啊,不等于钠。然后咱们做个封装。cos. getp.put加上名称,这名称我从课件中复制一下啊,跟它的名字咱就尽量保持一致,我叫这个名字就是他。
18:07
Subject title,然后它的值从subject one里边取到这个title,这个封装是它的第一层分类,然后咱用同样方式分成它的第二层分类,这个啊,我就分制过来,把这个直接拿过来。咱们看一下,根据这个sa ID取到它这个名称进封装,最后咱们把这个cos做个,然后在cos里边有咱们最终ID对应的名称。这个捋吞一下啊,所以说以上呢,咱们通过以上这些代码,就把课程分类的条件查询带分页的接口,咱们就最终完成了,然后这过程中用到咱之前讲的条询查询带分页,另外说到一种封装的过程,咱们查出数据集合,便利把ID的名称取到,最终进行封装,在cos里边我们写了这么一个map集合,专门用于封装它的其他值。
19:06
所以以上啊,就是咱们接口的开发。
我来说两句