00:00
也就是按照刚才咱看到那个格式编写接口,那咱们就是来到我们项目中这个edu subject中,因为是课程分类。在里边咱们写借口。这个啊,我先关掉,一会咱们重新来启动啊。然后接口怎么做呢?之前咱有第一个添加课程分类,然后下面我再写第二个,第二个就是课程分类的。列表功能,咱要做到这个叫树形结构做个显示啊,就是树形做到。那这个怎么做,我来写一下啊,首先我们写一个提交方式啊,但是这个提交因为是查询嘛,他也没有什么参数,我就来一个。Get提交了,在get里边,我们给它起个名字,比如就叫这个啊,就叫get。Subject得到所有的分类,包含一级和二级。下面写方法。
01:00
Public返回咱都是R名字,比如我也交了名字at o。Subject。这是一个方法,然后这写完之后,最后我先推一个值,咱先不让它报错,就是r.OK。这些方法我们就串出来了啊,主要这么一个方法,然后写完之后,下面给各位来分析一下,咱们这个代码到底应该怎么去写,就是或者说这个过程应该怎么去实现,给各位做一个详细的分析。这图我先截过来啊,然后咱们来具体分析一下这该怎么去写。而这个过程呢,它的难点在哪里?答案的数据格式要跟它这格式一样,就咱要返回。这种格式的数据啊,它的难点是在这里,关键是咱要怎么才能返回这种格式数据啊,这是一种比较稍微复杂点操作,那给大家具体说一下啊,我们怎么做。
02:03
首先呢,有第一种方式,这一种方式啊,咱一般不这么用,但是我也说一下,第一种方式最简单,各位应该都可以做,怎么做呢?咱在里边呢,我们可以按照这种结构,咱们给它拼个字符串是不是可以的,比如说现在把一取出来,把二级取出来,然后按照结构把字符串以拼接,是不是可以做到,这是第一种方式,但是拼接的话肯定不方便,因为它里边多少直女不知道,而且拼接特别不方便,另外它的效率很低,咱们肯定不这么做,所以咱们用第二种方式给各位做到,那这种方式怎么做,给大家特别说一下啊,这种方式就是下面我要讲这种方式,也是我们在实际中比较常见的一种封装数据的方法。包括以后我们再看到这种数据,都可以用我马上说这种方式进行封装,给大家讲一种封装的方法啊,那我们来具体说一下啊,这个结构就是模式是固定的,只是里边描写具体代码。
03:05
那咱看怎么做啊,我给各位写步骤,然后咱们写代码,首先里边的。第一步操作。咱怎么做呢?需要就是针对你那个返回到数据创建对应的实体类,这是它的第一步操作。比如说你现在看你反生数据有什么数据,那我就创建什么样的实体类,这是第一步,那咱看我这个数据啊,在我们数据中呢,大家仔细看它这里边呢,这一部分。是不是一级分类,这一部分是不是二级分类,所以根据它就建两个试体类,一个是一级分类,一个是二级分类,这就是他的第一步操作。那我来创建一下啊,咱就创建两个试题类,一个是一级分类,还有一个是二级分类,把这两串联出来,然后你的两是一类跟它对应,里边都是有ID和名称,ID和名称把这个做到,这是第一步操作。
04:11
那我们来写一下啊,这个过程。这个呢,因为我们建十几类嘛,所以我把十几类就写到an中,为了区分,我给它再来建个包。这个包我就叫subject。啊,这个包,然后在subject中咱们来创建两个这类,第一个是一级分类,比如说叫这个Y。Subject啊,一级分类,这是第一个,再创建一个叫二级分类,我们写一个叫to subject。这是它的这么两个是一类,然后创建之后,对应咱们那个就是数据,写上它的属性,就是ID和名称,然后写一下啊,就这是一级分类。
05:00
然后一级分类中呢,我们写ID和名称,我来一个private string,这是ID,第二个private string。写它的名称,名称呢,这里边叫label啊,咱看一下我的表里边,表中叫title,写哪个都可以啊,我就写个title了,这是我们的第一个啊,写完之后上面加上这个date属性,生成它的get set方法,这个就是一级分类,我们就写出来了。然后洗完之后,我们再写它的二级分类,就是这个。二级分类上面也是加上一个date,然后在二级分类中它也是ID和名称,所以这个我们就做到了,这是一级分类,这是二级分类。这是第一步操作啊,各位知道,要根据你的数据,电视一类。然后第一步走到之后,下面咱做第二步操作。我这里写下啊,来看第二步。
06:03
第二步咱要干什么呢?给大家强调,因为现在还是按你的数据,你看一下这两个,就是这两段数据中他们的关系,什么叫关系呢?各位看啊,一级分类下边是不是有二级分类啊,另外一个一下边是不是可能有多个二级分类,他们之间是不是有关系啊?所以第二个操作怎么做,咱们就在两个实体类之间来表示它们之间的一个关系,就是一个一分类中有多个二级分类,把这关系在世一类里边表示出来。一个一分类,有多个二级分类。那这个怎么表示,给大家写一下啊,把括这格式你要清楚啊,刚才咱们写到过,这是一级分类,里边是不是有多二级分类,把这关系通过实体类最后表示,因为目前两十类是独立的,它们之间没有关系,但让它要有一个关系,就是建立个关系,那怎么做给大家写一下啊,咱们来到这里边,因为我现在想表示就是一个一一分类。
07:14
它里边有多个二级分类,那这个怎么做大家考虑啊,第一个这个是一级分类,里边有多个二级分类,那这多个。咱要怎么填出来,怎么舔出多个的效果。我觉得各位应该能想到啊,多个嘛,肯定不是一个,那咱家肯定写个普通的这个类型,肯定不可以,那多个怎么做,你可以写个数组类型,是不是也可以写个集合类型,因为你的数组和集合里边都可以存多个数据,所以咱这里边为了操作方便,咱用个集合来表示,用个集合表示它的多个这种结构啊,多个嘛,肯定是能存多个数据的这种结构,那我们用集合。
08:01
那我来写一下啊,这里边我来一个private加个list,然后例子中的泛型,因为它要表示二级分类,所以咱加上二级分类,这个two subject,这表示多个,给它起个名字,名字我就跟他一样,叫这个children。等于咱就直接给他上一个叫a list。啊,直接扭上这么一个啊,这list这么一个即可。这个啊,给它创建出来。然后把它的依赖咱给它就引进来,这样的话,咱把这个我们就最终完成了,这一行代码就表示一个一分类中的多个二级分类,那怎么填出多个,咱用个粒子集合,集合中的每部分都是一个二级分类对象,就是这种结构,你看啊,这个是一分类,然后下面有一个这种结构,它里边有多个对象,每个对象是个二级分类,就是咱们写的这种结构。
09:04
啊,所以把这个我们就做到了,这是里边的第二步,建立世界类之间的这么一个关系,来用集合来做个表示。我把这个啊拿回来,而咱们做这些目的都是为了最终那个数据的封装使用啊,要不然咱也不会这么麻烦,因为你不这么做,数据后面不好返回它那个格式,这是第二步,我们就完成了啊,然后这个完成之后,下面我们进入到就是后面步骤,咱就写它那个具体的代码的那个实现。我想这位置啊,就是第三步,咱用来编写那个具体。封装的这个代码,把这个我们就能做到,那怎么封装给大家,我们就最终来写下这代码啊,这代码要稍微复杂一点点啊,但是各位这代码必须要会写,因为咱后面这种形式会写的很多,当你遇到这种结构要返回,一般来讲我这就是我现在讲这种方式用的是很多的,很多手都是这么来封装,就是你建是一类表示关系,然后写分装代码。
10:10
那咱们来写一下啊,大概怎么做,首先啊,我把这过程咱就都写到service中了,在里边,比如一会儿我写个方法就是得到你那个就是。呃,所有的这个分类就是一级和二级的分类。为了区分改个名字,然后这个得到之后要返回什么呢。希望各位能想到啊,比如现在我们要查数据,最终肯定要反映一个格式,那反映什么格式呢?大家看这个。返回是这么一个结构,而这结构呢,因为你现在查这个分类,在我表中是不是有多个一分类,每个一分类中是不是又有多个二级分类啊,它反而值肯定不是一条记录,是不是应该是有多条记录。C咱们的返回结构,多条记录肯定是一个历次集合啊,肯定反应是它,如果你一条记录是个对象,多条记录是个集合,但是现在就有一个问题。
11:09
大家说这个集合中的泛刑应该写什么?D该写什么?这是一个关键啊,给各位强调。因为你看啊,我们现在这个对象中这一部分是不是一级分类,在一级分类中用的集合表示,是不是还是二级分类,所以咱泛型中就写这个一级分类这个。泛型是不是可以了,因为在每个意义中又有多个二级,咱写它就可以了。这个啊,各位要能想清楚啊,我再说一遍。我们现在要查询肯定有多个一分类,在每个一级中又有多个二级,而咱这是一类中既有一级,用集合表示二级,所以我把它返回就可以了,最终这里边会有咱们的所有数据,然后咱一给它re吞会用这份数据给咱就返回了。所以现在反是它。
12:04
我这里加个注释啊。咱们的历史集合中的泛型。是我们那个一级分类。因为一级分类中有它本身还有二级,咱们这么来做啊,这是一个集合,然后最后比如把这个完善出来,加上一个date啊,这个名字我就叫list,它的值就是list这CTRL部分那就写完了,就这个代码啊,然后最后重点咱都是在这个threat里边,把这个最终实现。那我在service中方法我们先创建。这个方法课程分类列表使用结构service的这个方法创建之后找到它那个实现类。这个实验类在实验类中,把它的具体方法我们最终就写下啊。这个方法。
13:01
最后来写一下啊,我们看怎么来做啊。还是先分析一下啊,然后写代码,写代码其实比较快,主要这个过程希望各位我要求啊能就是各位能自己独立把这个过程能给他分析出来,我这里边给各位来说一遍,希望各位能知道每步要做什么,也就是说啊,各位在写代码的时候,你不要说写一行看一行我这代码写一行看一段视频,那这么写代码没有实际的意义,你写完之后,也就是写了一遍以后,没有这个视频,没有我这代码什么你也写不出来。因为在实际的工作中没有这种场景,都是我们独立写代码,没有人给你写好,你按照它来去写,没有这种过程,所以各位啊,你在写之前,头脑中应该有一个清晰的一个思路,知道每步你要做什么事情,或者说你明确最终要达到什么样的效果,不要说你写的过程很迷茫,第一步做什么,第二步做什么你都不知道,只是这个蒙着头去写代码,所以咱们过程先做个说明,然后再来写啊。
14:03
那怎么做,给大家来说一下啊。因为咱现在要返回的是这种格式,那我们这里边大家看它肯定有一级分类,还有这个二级分类,那我们代码是什么样一种思路呢?给各位啊,一步步写下,然后再来写,首先我们的第一步操作。因为咱现在要返回数据,数据呢肯定有一级和二级,所以第一步操作咱是不是要把那个就是查询出所有的一级分类,然后我们再查询出所有的二级分类,这两个分类咱是不是要先查出来,就你先有数据才能封装,没有数据你怎么封装,这是它的第一步,第二步把所有的意义分类,所有的二级分类咱都给他要查出来才可以做到啊,这是它的。第一步第二步,然后都查出来之后,咱到第三步。
15:02
就来封装它那个一级分类,就一级分类放到里边去,然后封装之后第四步咱再封装它那个二级分类。主要是这么一个总体上流程,先把数据查出来,然后你再才能做封装,你没有数据,那怎么做到封装?这个啊,注意要明确,那咱看一下怎么来查。咱看这个表里边啊,那现在我问各位啊,向各位各位一个回答,你说我现在比如说我现在想要查询出所有的一级分类,那各位说这应该怎么去查。希望各位知道的同学给我一个回复,比如现在我查这表,我怎么把所有意义分类都查出来,你说我要查大概,怎么能查出所有意义分类?这怎么做到?好,我看啊,陈同学给我回复了。其他同学我是否能想到啊,怎么查出作业分类?咱们在之前提到过啊,如果你想不到,我这里说一下啊,希望你记住这种思想啊,不要思想是一个特点,咱们看啊,一级分类的最大特点就是。
16:10
Parent ID是不是等于零啊,那我查的话,我只要加个条件,当我的派等于零,那一分类是不是都查出来了,这就是他的第一个,咱们可以这么来做,所以各位知道啊,但是我现在还想查它所有的二级分类,那这怎么查?希望各位能想到啊,你注意我的派ID不等于零,二级分类是不是查出来,因为咱只有两级,没有三级,那三级用其他方式,但是我只有两级,我可以这么做,当我的派D不等于零,我查出来的是不是就所有二级分类,所以咱们就这么做,你用PID等于零或者不等于零,咱们把一级和二级都可以查出来。这个我要知道啊,这是它那个存储的一个特点,我在里边写一下啊。派D等于零是一分类,它这个值不等于零,那就是我们的二级分类啊,这是它的这两部分,咱就做零分析,那咱们把这个我们先查出来,然后咱做封装,就先有数据,咱再往下实现。
17:14
那咱们来查一下啊。怎么查呢?咱是在这个里边做操作啊,那比如说我这里边先简单写个语句啊,假如我们写语句啊,我来一个select星号。From这张表,然后加个where啊,加一个叫parent。这个ID等于一个值是零,这查出来的肯定是一级分类,然后这个值如果说它不等于零,那查出来的肯定是二级分类,咱们做法就这么做,这是一级分类。然后这是里边的二级分类啊,所以这是一个语句,但是咱现在把语句变成咱的代码在里边,其实就是多了一个条件就可以了啊,就这么来做的,那咱看怎么来写啊,首先看第一个,因为咱有条件嘛,按照咱学到的,我来一个叫这个query rapper。
18:09
里边加上咱那个对象就是edu subject啊,实体类这个我起个名字叫rapper这个呃,E级类叫Y叫rappery了啊,等于new上一个宽RY rapper就是先new对象,然后扭完之后rappery里边设置它那个值。这个值就是咱刚才写这个叫parent_ID。就是这个字段的名字,然后它的值就等于这个零,这是条件就设置了,然后设置完条件之后,下面咱是不是要查询呢。但是查询怎么做咱要注意啊,咱之前好像没在service中写过这种代码,现在咱们要写了,你注意啊,我现在是不是在service中,而我要查的话,按照正常顺序,Service是不是要调map,但是现在我在service中怎么调map?
19:06
给大家说一下啊,有这么一种做法,之前我也提到过,咱家看他这个源码中就是继承这个类种。你看这里边啊。在他继承中,你注意他帮咱们做了一个注入,你看这个叫O尔,这名字是叫贝斯map,这base map就是咱那个map,所以咱做法第一种写法,我直接用map,那我就写一个叫base map。你看啊,这名字是有的,因为它帮咱们住了,用base map中那个查询方法应该叫这个select list的,咱把这个叫rapper one传进去,然后它最终返回的就是一个集合,这集合就是我们的所有的一级分类。这个我们就查出来了,所以这是它的这个写法,这个要知道啊,在service中怎么调map,咱们原始方式肯定要我们自己写那个O2把map注入,但是现在不需要了,他这过程中帮咱们做到了,而它名字就叫base map,所以咱写法就是我直接写个base map1调用就可以了。
20:14
就这么来做到啊,这是它的第一种写法,或者说呢,大家可以这么来写啊,这种写法没有错,还可以怎么写呢,我加上这么一个关键字。这个。叫this里边这个方法,比如我叫list加一个叫rapper one这么做也可以。this什么意思呢?它就表示啊,当前这service的对象,因为当前它是可以调的,我用自己来调,This也能调到两种方式都可以啊,我就用个bit map,包括你用this跟它效果都一样啊,Date掉当前自己的对象,Base map,用map对象。可以做到啊,咱就写map啊。这是第一个查出你所有的逆分类,然后下面是二级分类,跟它一样,我用它咱就快速改一下了啊。
21:01
二级分类,我给它改个名字,我叫这个rapper two啊,为了区分new rapper two,然后二级分类特点就是。Parent ID不等于零。注意啊,这个不知各位是否记得啊,咱是在项目第一天讲到过的,EQ表示等于,还有一个只叫不等于。我说各位是否记得啊,如果你忘记,我这里说一下啊,各位要牢牢记住,不等于是什么是这个方法。叫。你记住啊,我这里写一下EQ是等于ne,表示不等于啊,所以在我们加上一个ne,它就是不等于零,然后不等于之后咱也是调这个方法,Base map中的select这个例子传一个叫rapper to啊,注意别传错,然后它返回就是所有的二级分类,我叫to萨贝的例子。这样的话,把这两部分我们就做到了,这是所有的一级分类,这是所有的二级分类,咱现在都查出来了。
22:05
然后这用法你记住啊,用base map,或者说我刚才说那个写个this,点上方法都可以就都可以做到啊。这个我们就写出来了啊。然后强调啊,我看一下我的课件中怎么写的啊,就各位看我课件啊,有的时候可能跟我上课写的有点偏差,但是东西都一样啊。看我课件中这个都没有错,单页键是一类,然后写上这个名字啊,这名字跟咱没起一样东西都一样,这个位置我们调方法查询,然后查询之后里边就做这个一级分类和二级分类啊,课件中也是写了被map,这个应该可以查出来,包括里边这是等于零,这是不等于零,用这个我们做到。这个两部分我们就完成了,把数据得到了,然后数据都得到之后呢,下面咱做的肯定是要做一个最终的封装,就是把你的一级分类,二级分类,最终封装成这种形式。
23:04
那咱们看怎么做啊,首先呢,我先这么来做啊,我先呢,创建一个例子集合,用于存储咱们最终封装的那个数据。啊,存储最终。封装的数据就咱先来个集合,然后最终数据呢,都放到集合中,因为咱们这个方法返回到就这集合,那我来建个集合。集合起个名字,我叫这个final。Subject。例子啊,就是最终的这种。分类的一个集合,New上一个叫release,这咱用于最终的封装。那咱们看这个我们该怎么做啊,怎么实现这个过程。咱先看一下啊,首先大家注意啊,我这个集合是咱们最终往里面放数据,但是目前的集合我有没有它里面没有东西为空的,那往里边要放那种,咱要放什么呢?第一个咱先往里边啊封装一级分类。
24:03
给各位看一下啊,一级分类目前是不是就是它呀,Y萨例子,这就是咱们所有的一分类,那我现在把这个集合中那种放到这个集合中是不是就可以了。你注意啊,这虽然是一级分类,但是它不满足咱这格式,所以咱要给他把这个集合中这个内容放到这里边去,这是咱要做的事情。这个啊,给大家说一下啊,我这里简单画个图啊,这一部分是我们目前查出来那个,就是所有的一分类里边有这数据啊,它是在这个位置。这样我截一部分啊。这太长了,这是咱查出来的所有一级分类,它在这个集合中啊里面有,但是现在呢,这个集合你要返回不满足咱的格式,咱要把这集合呢,变成这个集合给它返回就可以了啊,这是我们要做的事情。
25:01
给大家画这个位置,所以咱做法就是注意我这里画的方式啊,你把这个集合最终要变成这个集合就是要做成。这种形式。我说各位是否能看懂啊,但是这么多目的,因为它那个前端只要求他,他不认识这个东西,那怎么做呢。就是把这个集合变成这个集合,这怎么做?我说各位是否知道啊,应该没有什么特别复杂的,那我做法怎么做呢?咱可以用一种最原始方式,我现在呢,把我们这个集何里边内容给他变历出来,然后再给它一个个放到这里边去,是不是就可以了,就这过程先把这个所有一一分类变历,变历之后得到里边的每个一分类,然后把值取出来,再给他封装到我们要求的机构中去啊,这过程就叫封装一一分类。然后写一下啊。过程就是。把我们这里边。
26:01
查询出来的所有的一分类那个list的集合,给它做一个遍历,遍历之后呢,得到里边的每一级分类的对象,然后得到之后获取每个一级分类对象里边的值,然后给他,最终就是。封装到我们要求的那个例子集合里面去,咱要求集合就是这个集合给他要放进去啊,所以现在这过程就是一分类封装,就一会儿咱把它变利得到纸,最终放到这个里面去,这么做就可以了。啊,这叫异分类,二级分类跟它类似,二级分类呢,咱也是便利便利之后,但是二级分类要放到什么地方去呢?按照我刚才这个格式。大家看啊。一级分类中是不是有二级分类集合,所以咱们把二级分类要放到每个一种啊,就是这么一种嵌套,一种格式,所有的分类里边有一级,一级中有包含二级。
27:04
啊,所以这是一个基本的过程。这个啊,我再重复一遍,然后下一个咱们具体写这个过程啊,这个过程就是呢,首先我们做法就是先把所有的意义分类和所有的二级分类先查出来,为了咱们做封装方便,因为咱这么做的目的就是呢,它这个前端要求咱的格式必须是这种格式,你返回别的格式,它不认识,它只要这种格式,所以说你不用那个框架,你可以随便返回。单用框架格式,必须这种格式,所以咱就建了两式以内,一个一级,一个二级,一级里边用集合表示二级,最终返回这个集合,因为它里面包含二级,而我们最后封装怎么做呢?把一级这个集合先变利,然后便利之后得到数据。放到集合中再变历二级,也是做类似这个过程啊,所以咱们就一会儿把这两个查出来的例子进行遍历,最终实现这个封装,这是一个具体一个过程,各位先给他知道啊,比如说这个过程在实际中我们经常在这种情况下,大体上都这么来做,用这种格式,这种形式。
28:14
变成我们最终要的这种数据。这个啊,各位我们先。
我来说两句