00:00
各位同学大家好,下面呢,我们就开始完成菜单的树形显示,咱们把接口进行实现,那我下面在这个里边我们写一下,咱们直接进入到我们的service里边,在里边进行实现,那咱们看怎么来做啊,首先我们的第一部分大家想一下咱们怎么做。我给大家写个注释,第一步是不是先获取我们的所有的菜单,因为所有菜单虽然说能得到,但是跟我们要求的格式是不是不一样,如果你不一样的话,IUI它不认识,咱需要还要做处理,所以咱们第二部分就是把我们所有菜单的这个数据。转换成咱们要求的数据格式就可以了,最终做退,那咱们来写一下,首先第一步先得到所有菜单,咱们直接得到一下我们调用base map中的方法select例子,然后传个now,这样的话返回的就是所有的菜单,咱们起个名字叫system menu list。
01:11
这是我们的地步,然后第二步呢,咱们把这所有菜单要进行一个便利,最终变成我们想要的结构,这过程中要用到递归,那怎么做,给各位进一步写一下,首先呢,这里边为了方便我写好一个工具类,咱通过工具类我们进行实现,那我写一下啊,我们就叫这个menu。叫helper。这个helper,然后在里边呢,我们加上这么一个,就是那种。点上一个方法,这个方法我就叫build的这个tree,就是构建使用结构,然后把这个集合咱们给它传进去。最终让他就返回一个历次集合。
02:00
咋卖?做一个,比如叫result list。然后最终把这例子集合,我们做一个比between。下面呢,我们来创建一下这个工具类。我现在在里边呢,我们建个包,这个包我起个名字就叫,然后里边呢,把这个类咱们进行创建,就是menu help。然后在里边引入依赖。然后下面呢,咱在menuper里边就来创建我们的具体方法,咱们把方法做一下最终的这么一个实现,那下面我们来最后写一下这个内容。首先啊,咱们在这个menu helper里边,我们先来创建第一个方法,为了方便这方法我就写成这个静态了,方便咱们操作,那第一个方法呢,就用来构建我们这个树形结构,那咱们写一下啊,就是构建树形结构。
03:06
那这个怎么做呢?给各位先做一个分析,因为这个过程呢,确实要稍微复杂一点,那大家注意啊,因为咱要用递归进行操作,那递归的话,这各位清楚什么叫递归,递归是不是就自己来调自己啊,当然递归有两个特点,第一个递归要一个程序的入口,就是从哪里开始递归,然后第二个。有一个结束的条件,这是递归的特点,有入口,有结束,那咱们看一下这个特点啊,首先咱递归怎么做,是不是从我们的根节点开始递归,那哪个是根节点,大家看里边咱分析过,是不是就是它有D等于零代表的根节点,比如我们的入口。然后咱们从它之后我们就用遍历,怎么历呢?大家想一下,咱们要构建数性结构,或者说层级关系,咱们分析过啊,就咱做判断,ID和PD里边相同,那这个是不是它的下一层节点,咱进行数据的构建。
04:11
这是咱们一个基本过程,就是根据根节点进行递归,然后判断IDID是否一样,一样的话咱进行数据方装,最终进行实现,就是从它往下找,直到这个数据找不到为止。所以下面我们来写一下,首先第一部分咱们先new一个历史集合,为了放我们最终这个数据。我在里边写一下啊,就是创建一个集合,封装最终的数据。那list里边咱们加上一个泛型system menu。然后这个名字我就叫tree啊,就最终这个数等于new上一个a list,这是我们的第一步,然后这步之后呢,我们的第二部分,因为大家看啊,刚才我把这个所有菜单集合我们已经传进来了,所以咱根据它来做一个处理。
05:09
就是根据它我们进行遍历,然后咱们找到咱们递归的入口,所以咱们写第二部分便利所有菜单的集合,这里边我来做一个便利。咱们直接写下,然后加上这个system menu system menu。后面加上这个集合,咱们把它直接拿过来便利之后呢,得到里边的每个对象,每个对象之后,下面咱们就是我写的通俗点啊,找到咱们递归的入口,什么是入口,也就是你的。ID等于零代表我们的入口,那下面我们来找一下,咱们加上一个if,这里边做个判断,System menu get,这个叫ID,或者说parent ID。
06:08
然后它的值如果说等于这个零。啊,当然等于的时候咱给它啊简单做一个处理,我们看一下表里边啊,咱就找这个实体类。PID,它的类型是不是一个浪类型,所以咱们就根据浪来取值,点上一个叫做浪Y0,如果说它等于零,那就表示进入到我们的入口中,因为咱从顶层开始便利,如果它是入口的话,那在下面来写个代码,我们最终数据肯定放在这个trace里边,咱们trace里边加上一个A,往里边放数据,这个数据呢,咱们写个方法,在方法中往下进行递归,然后写个方法就叫find。Children。放到纠正里边,传两个参数,第一个当前对象,第二个咱们菜单的集合,通过这个方法咱一会儿进行递归,然后当这些都完成之后,最后咱把这个集合做个re就可以了。以上就是咱们的第一部分,构建树形结构。
07:20
咱们这里做的是找到咱们的入口,通过入口进行递归,而入口就是派等于零代表咱的入口啊,第一部分完成,完成之后呢,下面我们再来创建第二个方法,就是这个find children。我在下面进行创建,然后这个方法这里边我写一下啊,他做的是什么呢?我们的这个就是根节点。然后进行递归的这么一个查询,就是查询它的子节点。然后查询此节点的时候,里边有这么一个判断的条件,这条件很简单,什么条件判断?就是你的这个ID和trr ID是否相同,如果相同的话,那就是它的直接点,然后咱们景封装不相同,那就不是。
08:20
写一下啊,如果相同,那就是它的子节点,我们进行数据的封装,如果不是的话,那咱就不进封装,以上就是犯到修正这个方法,那下面呢,我们在里边把这方法咱们具体写下,就是从根据点往下进行递归。重复进行调用,重复查找它的直接点,那咱做一下啊,首先我们的第一部分,因为咱们在这个system menu里边,我们要不断往里边查找子节点,就好比说我们查到第一个在它的下面还有没有子节点,那首先第一部分。
09:01
咱们啊,先做一个数据的这个初始化。System menu.set children在里边,我一个release,先做一个初始化操作。这是第一部分,然后第二部分呢,那咱们就是。便利递归进行查找。那这个怎么找呢?给大家再说一遍啊,咱们说的慢一点,因为这个确实复杂点,比如说咱从最开始看啊,我们刚才在里边先得到所有的菜单,然后调用工具类中的方法进行递归查找,在里边传入所有菜单集合,然后在方法中咱们做了什么,先找到我们递归的入口,也就是我现在找到我的根节点,比如说咱们以这个为例。比如说我现在啊,找到了系统管理是不是咱们的根节点,那怎么做呢?咱就拿着系统管理找它下边有哪些子节点,那怎么找呢?我们的做法就是拿着这个ID2到所有材中去比较谁的ID跟我值一样,那就把这些数据给它封装进去可以了,所以下面咱就做这个事情,但是我找完之后还要继续再找,我再找用户管理,再找菜单管理,再找角色管理等等,以此类推,都是这么来找,拿着他的ID,再找所有菜单中谁的per ID跟他一样,最终进行封装。
10:35
这个过程呢,我在图里边给大家画一下,然后咱们最后再写代码,这个代码并不难,只说这过程不好理解,所以咱们需要详细再分析一下这个流程。我现在把这部分给各位来截个图,咱用它来说明这个特点啊,我就把这个截个图,咱就截到这里。然后咱们啊,说这过程怎么做到是递归查找,说这个流程通过它给大家写一下啊,首先我们的第一部分咱先得到就是。
11:09
所有菜单的集合啊叭,如说我们起个名字就叫LIST1,就所有菜单,或者就叫list这个集合,就是现在比如说这张图所有菜单,那怎么做呢?咱的第二部分做法就是找到我菜单这个根节点,比如说你的这个顶层的这个数据。因为你是从顶层往下查嘛,那怎么找,就是谁的parent ID值等于零,把这找到,当然我们现在找到等于零的数据是不是就是他呀,这个系统管理是不是零,然后它的ID是不是二啊,所以我们现在找到了就是系统管理它的这个ID等于二,然后它的print ID等于零,这就是咱们的顶层数据,这是我们的第二部分,咱刚才已经写过了,就是在这里找到顶层数据,Party等于零,就是顶层,然后咱们往下进行递位查找,但是往下该怎么找,我们现在看第三步给大家写一下啊,咱就以这为例,那怎么做呢?
12:14
我们的做法就是啊,也可以这么理解,拿着这个ID等于二的这个值,咱们去比对菜单中的所有的数据,就跟菜单中所有数据进行比对,拿ID值进行比对,比对什么呢?就是比对啊,这么写谁的?Parent ID值等于二,就找这个,也就说具体什么意思呢?咱们来看啊,我这个ID等于是二,那我们就找she的parentd跟它一样,我们看到这几个parentd跟它是不是一样,咱就找到这个数据,然后找到之后怎么做呢?我们做法就是把parent ID值等于二的数据就封装到这个ID等于二的这个里面去,就是封装到它那个children准里面去,咱们刚才在是一类中已经加了一个children这个集合,咱们看一下啊,就加了这个。
13:11
给它就放到秋准里面去,就来做这个事情,然后以此类推我们的第四步。以此类推,那以此类推什么意思呢?咱们同样,比如说我现在啊,我在找这个就是用户管理ID是三找谁的ID跟他就是谁的partyd跟他一样,比如我们一找这三个是不是一样,我们再封装,以此类推,再找下面的内容,直到找不到为止,以上就是递归过程,咱们就是这么来做,我再重复一遍啊,然后最后我们来写这个代码。首先过程就是第一步得到所有菜单集合,然后咱们找到菜单的根节点,也就是判等于零,零个数据,然后找到之后拿着根据点的ID去找谁的perd跟它一样,比如我找这2PD是二,是不是这么多,找到之后把它做封装,然后咱们再递归,再找用户谁的派D是三,包括找角色,找菜单管理等等,最终得到所有数据,然后咱们完成封装。以上就是递归过程,咱们刚才代码中已经写到了这个位置找到了根节点,下面开始递归,再找它的子节点。
我来说两句