00:00
递归读取数据啊,我们这一块没有什么问题了啊,我把这个数据给它删掉一下啊,咱们删掉一下,嗯,这个咱们不要了啊,就是演示演示,所以我们这个不要啊行。好。那么递归读取数据我们已经做完了啊,而且呢,感觉上非常的清楚啊,附菜单子菜单形成父子关系,这就够了,可是我们告诉大家,这种方式在我们实际的工作当中一般用的少一些啊,为什么呢?因为它的效率不够高,它逻辑清楚,开发简单,但是它的效率不够高,那所以我们的四啊,我们写上我们的递归啊,递归算法。它的效率比较低啊,比较低,为什么比较低,咱们来想一想,我们当前我们会操作数据库多少次呢?那么我们来想一想吧,我会根据零来读取,那你根据零来读取呢,一就被你查出来了,然后你再根据一来读取,二和三查出来了,二和三还要分别再读,读完以后三里面会有什么,它的456,那么456你还会再去读取,那么每一个都走一遍,所以说你会查询数据库七次。
01:19
123456,再加上个零,总共是七次,那效率怎么可能高,不可能高,所以说啊,我们递归没问题,但是效率不够好,那怎么办?我们就要想办法把它提高效率了。那么怎么能够提高效率呢?我们说呀。极限情况下,如果我们操作数据库一次的话,那么效率是最快的,你就读取数据库一次,就把它的这种结构给他准备好了,那这样的话,我们的效率肯定是最快的。所以那么我们这该怎么办呢?大家看我要把它做掉了啊,咱们现在效率不高,所以重新写一下我们的代码啊,把这个呢,咱们这么写啊来。
02:06
好了,那我怎么写呢?来,我们写上咱们查询,因为你要就查数据库一次,那么把它的结构准备好的话,那我们就需要查询所有的了,查询所有的许可数据,那所以呢,我们的promis啊,我们的就要要查询所有了,那么返回的就是我们的list啊,我们写上叫promis。然后呢,写上promiss啊,我们这么写就行了啊好嗯,那我想想啊,咱们前面这个这个有一个,那这样吧,咱们这个就别叫了啊,咱们写上一个叫得了啊嗯,好,写完以后,那我现在把这个呢来点一下,然后呢,嗯。然后我们现在把这块呢,给它来增加啊,查询所有一次性全查,所以增加时限,然后在这里我们再来叫permission点查询所有。
03:10
把这个去掉啊,去掉以后点击小灯泡,我们create,嗯,好,那接下来我们在这里圈A我们的select啊,然后呢,我们写上select,然后from_promis把所有的都给它查询出来,那你把所有的都查询出来的话,那我拿到的就是所有的许可数据了,那我接下来我要找到父节点,再找到子节点,然后组合它们的关系。那么我们要想组合关系的话,那我们是站在谁的角度更加容易呢?我们说我们是站在我们子菜单子节点的角度来考虑它的关系会更加容易,所以我们这里咱们for循环。
04:02
干嘛呢?我们写上叫promi p,然后就意味着我想把每一个节点都当成它的子节点,所以我们为了准确起见,我写上叫child等于P,我把每一个都当成它的子节点,那然后我去找它的负节点,但是有些节点是没有负节点的,比方说咱们那个顶级节点,它就没有负节点,所以我的判断一下叫做if,如果p.get我们的PID它等于零,那它根本就没有负节点,它没有负节点,它可就是顶级节点,那么我们就需要返回它,所以我们拷贝,拷贝以后在这个位置我就写上点,我们增加当前的节点,这个是我们需要返回的啊。好,我们放过来就可以了啊,然后呢,接下来else,那既然你不是零,你不是零的话,你一定会有负节点,那你的负节点在哪呢?你的负节点不就在这个集合当中吗?因为它是所有啊,不管你子节点负节点多好啊,它都在里面,所以我要匹配一下我们循环,然后我们的promis,然后呢,我写上咱们叫promis啊,然后叫inner,嗯,咱们叫inner pro啊,好,写上写完以后我现在就得知道了,知道什么呀,我得知道你当前的这个inner promis跟我们child之间的关系了,所以我得比对一下衣服,如果我们child.get PID,我们写上点equals啊,然后呢,是inner,我们promis.get ID啊,咱们叫做。
05:59
哎,写错了地方啊,咱们点ID,如果两个是相等的情况下,那说明你的单可就找到了,所以permiss我们叫,那么等于dinner我们的permis,哎,就是这样啊,上面是子菜单,这是负菜单,那负菜单子菜单都找到了该组合他们的关系了,那么parent点我们叫get children点增加我们的child,诶,就是这样啊,所以我在这补充一下说明,我们叫子的啊,彩单或叫子的那个权限,然后这个呢,我们叫做负啊,咱们写上叫做负,嗯。
06:42
哎,负节点吧,那咱们这别叫子菜单了,咱们叫子节点,子节点有了,父节点有了,然后组合他们的关系就可以了啊好,我们写上咱们叫组合父子节点的关系啊好,嗯。
07:00
行,写完之后,我们接下来我们就来演示一下,看看这种方式它行不行,如果它可以的话,它的效率应该就比之前的递归效率要快一些啊,而且我这还还漏写了一个什么呢,就是当你找到的时候,你要跳出这个循环,所以还应该加上一个break啊,这个咱们一会儿再加吧,嗯,好,现在这边已经启动完了,启动完了以后我刷新一下,看看我们的结果能不能出来刷新。刷新以后大家可以看到没有问题,我的塑形结构它照样正确的显示出来了,这说明我们的这种方式的效率是没有问题的,它一定比之前的递归的效率要快一些啊。
我来说两句