00:00
各位同学大家好,咱们继续来实现点播管理模块的经闻功能,刚才呢,咱完成了第一个就是课程的列表功能,咱们看一下已经做到了,然后第二个我们实现了添加课程的基本信息,包括修改课程基本信息,这个功能已经做到了,那下面呢,咱们开始做咱们发布课程中的第二部分,就是创建课程大纲,或者说章节小节中的新闻功能,那咱下面做个实践。首先呢,我们说个小细节,大家看一下啊,就是我现在点添加,在这个页面中,咱们可以添加课程基本信息,包括描述,然后点保存,下一步到课程大纲中,在大纲里边咱们点上一步回来是不是进行修改,这是咱们之前做到的。而现在呢,大家看啊,我在课程列表一遍中的最后有几个超链接,大家看一下,比如说我现在点第一个叫修改,那他回到是不是就是修改页面,就相当于咱点上一步的过程,然后在里边可以修改,另外里边还有第二部分叫编辑大纲,当单点大纲之后,它就到咱这个页面,可以实现大纲的相关操作,所以咱通过列表页面的超链接也能进入到你的发布课程中来,那下面呢,咱就开始做这个大纲部分。
01:26
那大纲部分怎么做,给各位做个说明,在这里边呢,咱们主要做三个基本功能,我写一下啊。首先我们课程大纲中的第一个功能,那就是课程大纲的列表功能,这列表怎么做呢?强调啊,其实就是把章节和小节按照树形结构做显示,那咱写个示例。比如说我现在啊,有这个第一章,呃,为了明确我换个颜色,这叫第一章。然后在第一章里面是不是有小节,比如现在我有这个第一节。
02:05
包括可能有第二节,它可能有多个小节,你看你的实际就这里边第二节,然后除了这个之外,这里边我们可能还有第二章,然后第二章中也有小节,比如说第一节、第二节等等,所以咱一会儿按照这种形式做显示,就按照它的章节和小节的这种树形结构,咱们把数据在里边就会显示,这个叫课程大纲的列表功能。这咱们马上进行实现,然后这个之后咱们还有什么功能,我们在页面中可以加个超链接,或者加个按钮,咱们可以实现一个章节的添加、修改、删除,包括小节的添加、修改、删除,那我写一下我们的第二部分,咱要实现就是章节的。添加。修改,包括删除,另外我们还要实现里边这个小节的。
03:00
添加。修改和删除小结也可以叫做课时,一个意思啊,就添加修改删除的这个功能,所以咱们马上要做的这个部分,那这个部分中涉及到章节和小节部分,还有这个课程大纲列表,所以咱下面先来开发里边的接口,然后最终再来整合前端,下面再来写下这个接口部分。那接口里边呢,咱们先实现章节的切换部分,那我来写一下啊,章节的部分呢,在里边我们找到,就是里边那个CTRL里边,在这里边我们写一下具体代码,那这个代码我先把它这个路径跟我课件中保持一致,方便咱们前端方便啊,不一致也可以,但是你要跟那个前端对上。然后别忘记加上跨域注解,加上之后在里边引入service,把这个给它注进来。Private capital。
04:00
Service。Capital service注入,注入之后在里边写它的方法,这方法我把结构先写出来,然后一会儿咱们一个一个听实现,首先第一个方法,那就是课程大纲的。列表方法,也就是说我们的章节和小节的列表的这个方法,这是第一个,这单位一会儿进行实现。然后这个方法之后,咱们的第二个方法我写一下啊,第二个咱要实现的那就是添加章节的方法。我写到这里。添加章节,然后添加之后咱们的第三个方法,那就是修改,修改里边的第一个,首先先根据ID查询你的章节,然后第四个修改,那就是最终的一个实现,除了这个之外,还有最后一个,那就是删除章节。
05:00
就是第五个。删除的方法,所以以上是咱们要完成的接口中的相关的方法,这个各位知道。另外就是小节部分,咱在video ctrl中一会进行实现,先把章节部分先做到,那下面我们写一下里边的句子方法。首先我们写第一个就是课程大纲的列表方法,列表方法大家注意啊。因为咱要这么做,按照章节小节的树形结构进行显示,所以一会儿咱把数据需要做一个封装,这个封装怎么做,给各位讲一种比较常见的封装方式,比如咱最终啊,我想给它反映成这种格式啊,当然实际中你可能别的格式我就想这么来做,比如咱这么来返回在里边啊,给大家写一下这个结构,一会咱们把数据按照这种形式咱们做一个返回。那我现在啊,我再重新画个图,在里边写一下,我们要最终返回课程大纲这个列表的数据结构。
06:03
写到这里啊,那我写一下,首先我们写的话肯定有一个数组,呃,为了明确,我给它调的稍微大点。然后数组里边的第一部分,我们肯定里边有很多的这个对象。啊,这是我们的对象,然后对象中的第一个对象我写一下啊,首先在里边的第一部分,咱们有这个课程的章节部分,比如说啊,他的这个ID。然后章节的ID,比如咱是一,然后另外有章节的名称,咱们叫title这个名称,比如说啊,我就叫第一章。这是咱们的第一部分,然后在里边有它的小节,那比如说我加个署名叫秋准,或者叫别的名字都可以啊,我就叫秋准。在children里边呢,咱们加上一个数组形式,里边放的是章节中的小节部分,那我写一下,比如说小节里边同样它有这个ID和title。
07:08
我脚的位置。就这里边啊,有这个ID,比如说ID第一个我们叫幺幺,然后里边有一个叫。Title,然后title我们叫第一节,以此类推,最终咱们把数据按照这种形式给它进行返回啊,就这种结构。为了明确啊,我把这颜色咱稍微调一下,让各位看的更明确。首先你看啊,最外层是一个Jason的数组格式,因为咱们会有很多的章节,包括很多的小节,我们都要进行返回,然后第二部分呢,在里边有这个对象的部分,就是每个部分是个对象,在对象中第一个它的章节。这下面有个children children代表里边的小节,它里边可能有很多小节,所以一会儿咱们反映数据,按照这种结构进行返回,多个章节,包括多个小节,最终在前端咱们用V-for遍历做个显示。
08:13
这各位先知道啊,这是咱们最终的一个数据的一个格式,大家给他知道一下啊,我把这个呃,稍微调整一下啊,然后咱们。拿到我们这个图里边。所以各位啊,知道我们目前的这个做法啊,当然你可以反映别的结构,我就想按照这种格式最后返回。也是我们特别想讲一种数据的封装过程。这个啊,说到这里,然后这个之后下面呢,咱就开始来写一下这个接口,让接口返回我们这个数据,那我说一下怎么做啊。首先我在这里边写下这个方法,这个方法我先加上一个注解A片。里边加上名字大纲的列表方法。
09:01
下面我们加上方法,加上一个get提交,然后里边我们给它起个名字。这个名字啊,我跟课件中保持一致了,我就叫这个名字。就是你的树形的列表这个。结构。因为咱要查询课程的大纲,比如说咱们添加课程信息之后,咱之前写过这个代码,返回到是不是你的课程ID,所以咱们要查的话,那就是根据课程ID来查出你的章节和小节的数据,所以在里边我传入一个课程ID。最后写方法,Public,咱们给方法起个名字啊,我就叫get。List的。然后在里边把课程ID咱们给它得到,加上注解,Pass。类ID完,用这个的列表结构,咱们起个名字get tree。
10:07
例子里边传入课ID,然后这个方法应该返回什么呢?给各位说一下啊,大家看这结构里边很明确,它是一个数组格式,数组格式对应Java中的应该是一个什么。是不是一个历次集合,所以咱最终返回的肯定是一个历次集合,因为它可能有很多的章节,然后每个章节中又可能会有很多的小节,所以咱返回历次集合。然后例子中的泛型呢,我这里边啊写好了一个VO类,咱们来看一下啊,这个VO类的名字我叫capital VO。咱们看一下这类里边是什么特点。打开啊,大家看这结构啊,首先你看里边character。View里边有ID title,然后ID title里边有一个历集合,放了一个叫video children,什么意思呢?理解为video是你的章节部分,因为一个章节中会有很多的小节加上一个集合,而小节部分我们用video video进行表示,所以以上是咱们一个基本的结构。
11:16
也就是里边这个样子啊,我在里写一下。首先我们有一个就是叫VO。然后再开VO中一个属性,叫做秋准。Children呢,是一个list集合,而例泛型我们是video video。这里边表示它的关系,这个我们用历次集合表示写一下啊,它代表你所有的章节部分,然后在每个章节里边有个丘疹的属性,这里边它是历史集合,代表一个章节中很多的小节部分,所以咱们现在用这个格式来表示数据的封装,通过开VO里边的video VO进行表示,所以咱们就返回一个历子集合可以了,一会儿就来封上这个数据。
12:08
通过它做到,这是章节部分,这例子集合是每个章节中的最后小节。最后把它做个旅退。result.ok传入这个list,所以现在啊这个。课程大纲的CTRL部分咱们就完成了,完成之后下面我们在里边把这方法咱们给它创建出来。创建之后,最终在实现类中来实现这个最终的方法,课程的章节和小节的这表方法,那咱们啊,最后把这个来写一下,看他该怎么实现。那这个方法呢,具体怎么做,我把步骤给各位先写出来,然后咱们一步一步进行实现,那大家写一下啊,首先里边的第一步,因为咱的条件是课程ID,所以咱的第一步操作先根据课程ID首不是要获取到你课程里边的所有的章节,把这个得到,大家看一下啊,在咱们的章节表里边是不是有课程ID,通过它可以得到,这时候咱们的第一步操作,然后第二步跟据类似。
13:21
根据课程ID,咱们获取课程里边的所有这个小结部分,把这个得到咱们看一下啊,在咱们微调小节表里边是不是也有课程ID,所以把这个给它得到,然后得到之后咱的第三步操作就来封装我们的章节部分,然后第四步再封装章节里边的那个小节部分,最终放到咱的这个list view这个机构中取,这是我们的一个基本步骤,那下面按照步骤咱们把代码做个实现。我们来写一下啊,首先呢,咱们定义一个就是最终数据的历次集合,为了咱封装。
14:07
那我写一下啊,我就叫这个啊,为了明确啊,我就叫。这个。List啊,就是最终的例子集合,等于new上这么一个A锥list,咱先把这个集合创建出来,一会儿咱们把数据都放到这里面去,最终把这个做个捋退。这是第一部分,然后下面再看这个啊,根据课程ID得到所有的章节,那咱来获取一下啊,看这个该怎么去写,咱们直接写下代码,通过MP进行实现。首先我创建一个query rapper,里边加上capital,然后起个名字,咱们就叫rapper capital。为了区分。等于上一个rapper,在rapper里边来设置它的条件,根据课程ID得到,那咱找到啊,看这个表里边,表里边有个字段叫cos ID,就是课程ID,咱把条件。
15:15
值传过来扣D,最后调方法,因为咱们现在在service里边,所以我直接用base map中的select list传入rapper capital,最终得到就是课程里边的所有的章节的这个。集合这个就得到了,是咱的第一步。给各位快速完成,然后咱用同样方式把课程中的小节得到,而小节部分呢,咱需要用的那个video部分,所以我在里边把video service给他注进来,我们写一下啊。微调。Service把这注入,注入之后用同样方式来得到课程中的自由小结,把这个做实现,而这个写法呢,其实咱也可以用这rap这么写可以啊,我这里边呢,为了各位啊,学习更多的知识,咱们换一种写法,让大家也复习一下我们之前讲过的另外一个rapper。
16:14
不是,各位是否记得啊,当时咱们讲过两个rapper,一个叫rapper,还有一个叫什么?这各位还有印象吗?因为还有一种写法,这种写法咱讲过,是不是叫这个拉姆的rap,就是拉姆的表式的一种写法,然后在里边我们加上一个叫video啊,所以咱用它做个实现这个依赖引入,然后咱们起个名字,我叫rapper。Video等于new上一个拉快rap,这是我们的写法啊,然后写完之后用rap。啊,注意不要写错啊,Video你看啊,上面用的是rapper capital,下面用的是video,别写错,咱们点上一个方法,还叫E课里边按照这个JAVA8中这种写法,那我写一下啊,加上video。
17:04
冒号。加上里面这个叫get cos ID,因为你是课程ID,传入课程ID,根据它做查询就跟上面效果是一样的,只是换了一种写法而已。最后我们调方法实现video service里边一个方法应该是这个list方法里边传入rapper video。最终返回的是咱们这个集合。我给他返回家。咱们叫做video list,所以现在啊,我们把这个课程中的所有章节和课程中的所有小节就都得到了,得到之后下面咱们开始做这个封装。但是各位注意啊,咱们封装的最终目的各位要明确,在我这个final集合中是不是有所有章节,每个章节对象中是不是要有所有的小节,所以咱最终做封装,那我来写一下啊。
18:00
那大家想一下啊,下面的代码咱该怎么去做。该怎么写?要求各位同学啊,记住一个原则,就是一般的原则是比较约定,俗称的原则,就是咱们遇到集合要么便利,要么屡退,咱目前这集合我们肯定是变利最终得到,那我现在啊,把集合我们做一个便利啊,变利呢有多种方式。我就把这便利啊,咱写的原生点。我写一个最普通的for循环方式,咱写一下啊。I等于零,I小于加,或者说你用增么流都可以啊,我就这么做了,咱把它变利。我加个注释啊。便利。咱们所有的章节,然后便利之后,我们这里边得到课程里边的每个章节得到一下啊capital list点上get加个I,它的索引得到每个章节,咱叫capital,然后得到之后怎么做,把每个章节是不是要放到咱的这个list中去啊,放到这里边去,就是最终放到这个叫final list中去。
19:19
我想这里啊,咱们钥匙。把我们。就是得到的每个章节对象,放到这个例子集合中去,就是来做这个事情,但这集合啊,有个特点,因为它的类型是这个类型,它要求里边的每部分是个capital v,但是咱目前是capital,所以咱需要做件事情。把里边那个character转换成开VO,然后再放进去就可以了,咱需要做这个事情。那咱来做一下啊,这过程之前写过,咱们先new一个开头view,我先溜一下。然后念完之后,在此文中有个工具类叫做 Bu.copy把capital中的数据复制到capital view中去,这样的话就可以了,这咱之前写过,然后这行执行之后,在开view中有咱的数据,咱把这VO放到咱们这个final这个list中去就可以了,给他直接放进去。
20:25
所以咱们通过这个部分就完成了课程里边的所有章节的封装,最终在例子集合中有咱们的所有章节部分,这个咱就做到了,所以各位啊,把这个能出来,然后章节做完之后,下面呢,咱来开始封装它的小节部分,把小节做封装。那咱写到这里呢,我们这么做,咱们先用拉克做个测试,然后各位同学看一下啊,咱目前效果怎么样,然后一会儿咱再往下写,因为我直接写有同学应该不好理解啊,咱先一步步来看,先看目前是长什么样的这个数据,然后看完之后再往下封装章节中的小节。
21:08
那咱来试一下啊。首先我把服务器重新启动一下,为了明确我在表里边啊,把数据先稍微调整一下,要不然咱们没有数据啊,咱们调整一些数据,比如说我现在啊,我就用这个数据Java基础。就利用这个数据啊,然后咱们看。这个课程ID是27,咱用它手动加一条数据,咱为了测试试一下就可以啊,再加一个,我们先加章节看一下啊,章节是27,是不是有的章节。然后咱再看小节,小节里边27找到啊。27小节。好像是没有27啊,那咱把小节给他加一下啊,你看啊,有一个二期有一个值,有二期这个值,所以这小节也有,那咱就不需要加了,我们直接测试就可以了,下面咱们来测试一下啊,就测试课程ID是27的这个ID值,它里边章节小节目前的结构长什么样子。
22:13
我们试一下啊,用SPA测试。LOCAL8301加上瓦杠u.HTM回车。找到咱的接口就是c control,然后在里边传入。课程的ID,咱们是27的ID执行。大家看效果啊,各位仔细看,你看我这里边啊,是不是有第一章第二章,然后第一章第二章的修着里边为空,这里边咱们马上放它的小节部分,目前所有章节应该就看到了,所以咱接口就完成了第一部分封装章节部分,这各位能给他准确做到,那下面呢,咱们开始封他的小结部分。
我来说两句