00:00
就是第二个接口呢,咱做一个功能就是删除菜单功能,那这功能什么意思给大家啊,我来解释一下啊,比如说现在啊,为了效果明显,我在表里边呢,手动加几条记录,咱一会儿更好删除,比如手动加一个啊。假如现在我这里边,比如加一个ID,我就叫UU,它PID是一,然后这个比如我们就叫T1,这是一个啊,然后加完之后我再加一个,比如叫这个111啊,这个是幺幺,比如这个叫T11,然后我再加一个啊,比如说四个一,然后这是。三个一,这叫test。三个一啊,咱就手动加一条记录,而我加什么目的呢?为了咱一会儿做这个删除啊,那比如说我们看一下啊,假如现在比如一会儿我想删这个爱丽是幺幺这个菜单,大家注意啊,幺幺是我删掉,但你看在幺幺菜单下边是不是有这个菜单,在这就三个幺的菜单,而在三个幺下边是不是有四个一这个菜单,所以咱们要删的话,一会儿当我删两个一的菜单,那它把这三个菜单是不都要删掉,所以咱做的这个功能就叫递归删菜单,当你把一个菜单删的时候,它里边的子菜单,如果子在下边还有子菜单,那我们依次都给它删掉啊,这个是咱要做的功能,叫递归删除菜单。
01:28
各位把这个给他知道啊,那咱下面就来写一下,看这个我们该怎么去实现。我在这图上啊,给大家画一下啊。咱要写这个接口。递归。删除菜单而做到这个效果,比如现在我把幺幺这个删掉,它里面的子菜单这些都要给它删除,那怎么做?咱来写一下这个方法来到我们这里边啊,就这个递归山菜单里边有个方法来,为了区分,我把方法咱重新写一个啊,让大家加上印象,比如叫这个。
02:02
鼓励啊这个菜单。然后洗完之后,咱们在里边把这方法我做创建。这个方法啊,这些方法就是递归删除菜单啊,这个就是remove child的白地,然后鼓励在这个实现类中,咱把这个方法我们做一个创建。啊,就是里边的。定方法,那我在啊,这里边给大家写一下啊,为了明显我都加上注释啊,就是咱刚才写到就是递归查询所有菜单啊,咱刚才完成这个操作,然后下面我们再写个操作,我写到这个位置啊。这个操作我们要做的事情就是递归删除你的菜单,把这个啊咱就完成,然后把这方法写过来,那咱们下面看这个该怎么去做啊,给各位做个分享,其实这个思路应该不是很复杂啊,我说一下怎么做。
03:01
大家注意我现在在方法中是不是ID,这ID是不是你的菜单ID,而大家要怎么做,就是把你这个ID的菜单和它里边的子菜单,如果子菜下边还有子菜单,咱是不是都给它删掉,就是我把这些值。都要给它删掉,那怎么删呢?因为咱们删除是不是根据ID删掉,所以我怎么做呢?说一下思路啊,咱就可以把当前ID和里边的子菜单ID都会得到,比如我现在把幺幺,三个幺和四个一这几个ID值都得到,咱就要方法做个删除,是不是可以做到,就是这是我们的一种实验思路啊,就是把里边的所有ID都得到,然后咱们做删除。写的位置啊,就是比如说我们现在要删除ID等于幺幺的这个菜单,那怎么做呢?咱就把这个幺幺这个ID啊,幺幺这个值。和幺幺菜单里边的子菜单。
04:02
他们里边的所有ID都给他。获取到最终咱删除可以就是把这个113个一四个一都得到,然后咱们调方法就可以删除,那怎么做,我写一下啊,首先因为我是在Switch里边,所以咱可以调那个叫base map,在base map中啊有一个删除多值的方法,当然咱也演示过,只没有具体说,那咱看一下这个方法。大家看啊,它叫Bel be ids里边传一个什么。Collection是不是一个集合呀,也就是说啊,咱现在我可以建个历史集合,然后把你所有ID值放到集合中,把集合传过来,他可以根据这些ID把菜单都删掉啊,所以咱们调这方法可以了,在里边我们传一个历史集合就可以做到,那这里边我就创建一个集合啊,就是第一步。创建一个历次集合,用于封装你所有这个删除菜单的这个ID值啊,咱写个集合或者一会封装,然后集合里边呢,因为它要存的是ID,那我们写个泛型就加个string啊,因为所有ID嘛,比如叫ID。
05:16
List等于new上一个list。然后这个ID list里边,咱像这个位置就是设置你删除的那个菜单ID就可以做到。写一下啊,就是第二步我们。像这个ID list的集合里边设置要删除的菜单ID,然后你把ID list传过去就可以删掉啊,但是现在我们要做个设置,那我说一下怎么做啊,这过程咱也是用到这个递归操作进行,那我还是在下面写个方法。比如咱们一会写个方法,假如方法我就叫这个。Select啊,起个名字啊,Select,比如咱们叫这个,呃,Select这个permission。
06:04
啊,Permission child这个by ID啊,就叫child list这个ID。啊,就随然请名字啊,把ID然后在里边呢,咱就把这个值传进去,咱最终在这里边做封装,那怎么传呢?各位注意啊,我这里强调,因为咱们现在要删的这个ID是不是这个ID,那咱就根据它在方中的查询,然后你查完之后把SOID封装到咱这个ID list中去,就做这个事情,在里边做咱这个封装啊,那咱下面把这方法写下。把这个啊,我写到下边啊,咱创建这个方法就是这个方法。啊,在这里边创建啊。这些方法做的适应就是。根据你当前的菜单ID,然后查询这个菜单里边的子菜单的这个ID,然后封装到咱的list。
07:04
集合里面去啊,就是来做这个事情,就是根据这ID把里边子ID再查出来,然后依次做碰撞,那咱来写一下啊,看怎么做。首先第一部分,因为他要查询嘛,那你要根据他查里边的子菜单的ID啊,先做这个事情,那这怎么做,咱看表里边啊,各位注意,我这菜单比如叫11ID,查它的子菜单是不是根据PID做个判断可以的,就是你的PID如果跟它的值是一样,那咱们做个查询,根据PID。与他比较啊,然后查询,那咱们写一下啊,在里边我就来一个叫花。这个rapper。然后在这个位置加上这个泛型,就是咱那个permission。啊行,哎,这个啊,Permission。然后在里边我们加上一个叫写一个名字叫rapper,等于new上一个rapper,像rapper里边设置它那个条件,我就加个EQ,因为它要根据PID做判断,我就写一个PID啊,就这个值,然后PID的值等于我们当前这个ID。
08:11
把这个查询,然后查询之后呢,因为咱们现在只想得到ID值,别的值我们不需要得到,所以咱们再加个方法。不知各位是否记得啊,咱做统计分析中就用过这个方法。叫select,比如里边加个ID,它就表示查出你指定列的值,咱这么做它只查出ID,因为别的值咱不需要,然后这个写完之后,咱们调这个face mapper中这个方法叫select list,把rapper传进去,最终返回这么一个list集合,比如集后就叫。Child,然后这个集合里边。就是我们查出你当前菜单下边的子菜单的ID值,把这个得到了,就是咱们这个child啊,比如叫这个child的ID list的这个得到了啊,然后得到之后咱下面怎么做呢?各位注意啊,因为这个ID是在我们的例子中,所以咱把例子中这个ID值是不是要取出来了,然后取来之后放到咱们这个叫ID例子中取啊,这里边取啊,因为要做这封装,那咱从集合中把值取出来,然后在里边封装,并且还要做到一个叫递归。
09:24
写这步啊,就咱下面把我们这个菜的ID例子中,它里边那个菜单的ID值给它获取出来,然后封装到这个ID list里面去,并且要做这么一个。递归的一个查询,就是再查里边还得还有那个子菜单再进行操作,那这做法咱写一下啊,方法很多种,咱可以首先直接做便利,然后取值,但是咱们现在我给大家换一种写法。我强调啊,这一写法不知各位是否有印象啊,应该也是我们Java基础进行学到的,是我们说那个这1D可以扒住那种写法啊,那我来写一下啊,要各位至少能看懂啊,因为这种写法在实际项目中很多人也习惯这么写,咱加一个。
10:12
Child I,因为便利他嘛,然后加一个叫。说各位是否见过啊,就是那个这个八中的流的操作,后面加一个叫for each,就用这个循环做到啊,然后咱给它起个名字,假如名字我叫item,后面加上这种写法。这知道吧,是不是那个拉姆的表达式写法跟咱们前端中那个就是箭头函数有点类似啊,拉姆表示,而item什么意思,就表示便利的得到里边的每个对象,就是将于做个便利里边每个对象指咱们换一种写法啊,跟之前那个负循环一样的,我是故意想这么写的,让大家知道的就是更多的写法。然后这个洗完之后,咱通过item把里边只取到封装到咱这个ID list中去啊,那咱们做个封装。
11:04
我们就写一个ID这个list,点上it,然后加个item.get这个ID。把这个给它放进去啊,然后封装之后呢,现在只封装一次,咱还要最终做个叫递归查询。那什么叫递归,咱们刚才写过第一个我家语印象啊,递归是不是在去调这个方法,再重复做个调用,然后把这做到啊那的我们写一个就用这个璧归,那现在我就是把这方法咱再给他调一次。写一个叫这点select啊,应该是它,然后里边传两个值,第一个值就是你现在这个ID。然后第二个值还是咱们那个ID list,这样的话把这个我们就完成了啊,就是通过递归方式,就我之前说那个思路啊,先找到查询入口,咱的入口是不是就这ID根据它作为入口,然后他查完之后,查完他下面的紫菜的ID,查完之后再查下面的ZID,以此类推,做这种递归啊,就是你把这个传进去做查询,然后再传,你查出这个ID,再传进去做查询,以此类推,直到他数据查不到为止。
12:19
啊,这个完成了啊,然后完成之后呢,最后在我们的ID例子中应该有咱们的ID值,当然这次完之后有一个问题啊。什么问题呢,咱刚才封装过程中呢,我当前这个ID没有封装,它只封装里边的子菜单ID,所以咱最后还需要把我们这个。就是。当前的这个ID给它封装到list里面去啊,因为他没有这个ID,那我们写一个ID list.a的封装这个ID,这样的话。这个功能就完成了啊,这就是递归删除这个做到了啊,然后这过程我再说一遍啊。
13:01
也是啊,不是很简单啊,但是比刚才那个菜单要稍微简单那么一点点啊,它的过程就是第一个咱们传入菜单ID,然后根据ID我们要做法就是把菜单下面的子菜单ID都查出来,然后最后调方法传这个例子集合,在例子集合中由你所有菜单ID,然后这就可以删除,那咱怎么封装,我们写了一个方法,这个方法方法中把ID传进去,根据它查里面数据,然后查完之后做封装,再去往下一层再查,以此类推,做这种BV操作,就这个方法重复调用,最终把那值直到查不到为止。然后都做到之后,最后在例子中再把咱们当前ID再放进去,最终调方法,这删除可以做到啊,这就是一个递归删除的这么一个写法,所以各位啊,把这个写法给他知道啊,然后写法中咱遍历的时候,我写的这种写法是JK8的写法,用到这个STEM流,还有这个。
14:01
叫做拉姆的表达式,这种方式或者说你不这么做,用咱们普通那种循环方式也一样啊,我是故意想这么做,那大家把这也知道啊。所以这个啊,是咱们说的这么一个过程啊,咱们就完成了啊,然后完成之后,最后咱们把这效果还是最终测试一下啊,看一下最终结果就咱这个递归删除。那我现在把服务器重新启动,最终咱们测试啊。我们一会儿要删的菜单,就是我刚才加那个幺幺这个菜单把它删掉,如果说效果正确,这三个菜单应该都可以删掉啊,那咱们马上来试一下啊,我先把服务咱先启动。然后咱们测试啊。等它停起来啊。啊,各位看啊,现在启动了,然后咱们来到我们的swa里边,我把这个啊,咱重新给它。刷新一下。
15:01
刷新找到我们这个CTRL里边这个递归删除的方法,就是咱们的这个方法叫ID啊,看是不是它啊ID啊就这个啊递归删除,然后在里边,比如现在我传一个菜单,ID就是咱们那个幺幺,而传它之后,它会把幺幺本身和里边的子菜单都删掉,咱现在没删的时候有三个,那我们来测试一下啊,我点。Try out,来看结果。提示是不是成功,然后到表里边咱刷新。大家看那个幺幺,包括那三个值是不是都没了,这叫完成删除啊,所以这个角递归删除,咱把这个给他就完成了啊,所以大家把这代码得好好去写一写啊,主要是里边的。这个过程啊,我把核心部分给大家演示截过来,就第一个啊,做这个封装啊,咱是放到例子中,然后调方法做个实践。
16:00
第一部分,然后这个做到之后,下面咱写那个就是递归,包括便利这种方法啊,也就是在。这里边我们写这个代码,主要是这个过程中做的是一个递归,再去根据ID再往里边再查询。这个啊给大家寄过来,所以咱们啊,现在把这个就完成了,递归删除菜单的方法。一张图啊,我先保存一下啊。咱们里边的第十个。权限管理中递归。删除菜单啊,所以咱们完成了啊,也就是说通过这两个方法,一个查询所有菜单,一个递归删除菜单,咱们把递归的代码给各位来写了一遍啊,所以各位把这代码自己多花点时间去练一练,因为递归代码。确实也是很重要的一个代码。
我来说两句