00:00
OK,那接下来呢,我们就来给大家去说一下,呃,在这个分布查询的基础之上啊。嗯,好,分布查询呢,然后我们要去使用这个延迟加载,明白了吧?好,什么叫做延迟加载呢?啊给大家去分析一下,这个延迟加载呢,也有人把它叫做什么呀,叫成这个呃,懒加载啊,也有人叫成这个懒加载,它是个什么意思呢?啊给大家分析分析,就是现在我们在写的时候呢,我们说的是我要查员工,并且要去查部门。对吧,但是呢,我们来分析啊,呃,我们每一次查员工,我们是不是都需要得到这个部门信息啊,是吗?就是我每一次对员工的查询,我都希望拿到一个部门信息吗?其实也是不是固定的吧,有些情况下我就想单纯的去看一下你的员工信息,我不想看你的部门信息,有些情况下呢,我两个都想看,对吧?那我就在想,对于人家只想看员工不想看部门的时候,你也把部门给部门给他查出来了,结果上呢,也是没啥区别的,你能看到员工就行了嘛,但是对于我们查出来那个部门的数据来讲,是不是就有点浪费了。
01:21
人家因为我我不想看对吧,我也不需要你给我查出来,但是呢,我们就直接给人家查出来了,这个其实就有点浪费了,能明白吧,只要你从数据库查数据,那么这个肯定就是要耗时间的嘛,能听到吧,所以说我现在希望实现这样的的效果啊,什么效果呢?就是我在查员工的时候呢,我根据你的需求来决定要不要去查部门。如果说你用这个部门我就给你查,如果你不用这个部门,我就不给你查,就相当于我们让这个部门数据的查询呢,做一个延迟的效果,我不会直接给你去查,而是等到你具体去用的时候,我才给你查,能明白了吗?这个叫做延迟加载,就是不要把它立即查出来,做为一个延迟的效果,你用我才给你查,你不用我就不给你查了。
02:12
听明白这个意思了吧,OK,好,那这个延迟加载我们怎么去使用呢?注意啊,首先我们有个前提,就是一定是分布查询我们才能去使用延迟加载,为啥呢?解释一下,因为分步查询它是分成了两步来走的,我就可以单独的执行第一步,明白吧,不去执行第二步,那如果说我不用分布查询,我用的是第一种方式,你这个能延迟吗?就一条搜索语句,要么就都执行,要么是不就不执行啊对不对?所以说前提就是必须得使用分布查询,我们才能去使用我们的延迟加载,听懂了吧?啊,那具体这个延迟大概怎么用呢?我们只需要在我们的全局配置文件中啊,配置文件中啊,加上什么两个这个S设置啊,加上哪两个三型设置呢?我们就需要。
03:12
回到我们的PDF里面了啊,来找到我们的全局配置文件,然后呢,SS找到它在这个位置,在这里面呢,其中有两个值啊,就是这个以及这一个我们来分析一下,第一个叫做lazy loading,就是我们的延迟加载,看到了吧,它默认的是一个force,那么我们必须要给它改成true,就是你一定要去使用延迟加载,明白吧?第二个配置呢,是一个aggressive,什么lady load啊,什么什么侵入,什么延迟加载是吧?啊,其实这个主要是来设置一下你加载的那个属性呢,是全部都加载呢,还是说按需加载啊,啥叫做按需啊,就是按照你的需要去帮你加载,那当然我们需要什么按需了吧,对不对啊,它默认是处处代表的是全部加载,那么我们把它改成false,也就是我们的按需加载A这两个配置我们要给它加上,一个是从false变成true,一个是从true变成false。
04:12
只需要把这两个setting加上,那我们就可以去使用延迟加载,其他的代码一概不需要去修改,来吧,我们把这个加上啊,好,首先第一个ready loading加到什么位置呢?加到我们的全局配置文件中,在这个位置看到了吧,全局配置文件找到我们的三体,好,这个位置我们来配置,第一个配置的就是什么呀?开启延迟加载,好,通过一个settinging来把这个写到这,这里面我们从false改成true,第二个是什么呀?哎,就是我们这个啊,配置按需加载好来fight OK啊,那这个的话就是什么,把这个来load拷贝一下,把它的值呢,从true改为fast a次我们要加的就是这两个C一下啊来拿到这个位置,我们只需要在全局配置文件中啊,把这两个东西给它加上来,就这两个配置给它加上,我们就可以去使用延迟加载,明白了吧?好,接下来我们就来测试啊,回到这个测试方法中啊,那么现在的话,你看一下我在调用这个方法的时候,我是不是既用了员工又用了这个部门啊,对吧,你用了这个部门数据了,那么他现在是默认会给你啊查这个部门数据的。
05:34
你看到没有,这两个已经是都发送了,能能看懂吧,OK,那么当我说我不用部门数据了。看到了吗?你看似你只用了员工啊,但是这么写的话,其实实际上还在用部门,为啥呢?因为员工中默认是就有部门啊,对吧,那我应该怎么做呢?假如说我只想看一下员工的,比如说名字,这我就很明确了吧,有没有用部门啊,没有用部门,那么这个时候我们再来运行的时候,大家看一看。
06:05
他就只发送一条so后语句了,看到没有,是只有一条so后语句了,查部门的这个so后L语句发送了吗?没有发送他认为你没有用,那我就不给你查,听懂了吧,但是你注意了啊,再比如说我刚刚看完这个员工的名字,我在这儿呢,给他输了一个分割线,然后呢,突然我又想去看这个部门了啊,那我们再来看这个结果,大家注意看员工信员工名字的时候呢,他只发送一条sool语句,然后呢,他突然发现你又要看部门了,他是不是又发送了一条sool句啊,而这条soql语句的发送是不是就是在我们这个分割线下面发送的,也就意味着你的这个操作是不是才触发了我第二条so后语句的发送啊,那么它其实就是一个延迟的效果,就是你不看它我是不会发送的,而我看它我才会发送,那么一开始呢,我就没有给你去查这个部门。
07:05
明白了吗?这个就叫做延迟加载,听明白了吧,那么我们说完以后呢,大家来想一下,这个在实际的开发中意义大不大,特别大,明白吧,特别大,这个意义是特别大的,可能现在感觉不是很明显,说你这部门也就俩字段,你查就查了呗,抠抠搜搜的是吧?啊,但是不是这么想的啊,那如果说我反过来呢,我现在我要查部门数据,对吧?并且呢,我要让你查到这个员工信息啊,你想一想,你把这个写好了,那你每一次查部门我都希望看到他的员工梦,不一定对吧,那你就去想,如果说我单纯的想看部门信息,但是呢,你把这个部门下面所有的员工,因为员工就是多个了吧,对吧,你把我只想看一下部门叫什么名字,但是呢,你顺带着把这个部门下面的100号员工信息都给我了,这个就是相当浪费了,明白了吧。所以说呢,我。
08:05
不是说你这个数据大小啊,而是说这个延迟加载的这个思想啊,以及我们在实际开发中它的意义是很大的,听明白了吗?OK,所以说了这个延迟加载我们是必须要诶给大家什么去使用的好,那么具体使用的话呢,就是刚刚给家去说到的,你只需要加上这两个配置,然后呢,在分布查的基础之上,我们就可以去使用延迟加载啊,对于我们第一个写的这个表联合查询来讲,是没有延迟加载这一说的,因为你就一条so,后句一直行是不是都查了对吧?OK啊,所以这个大家也要理解啊。
我来说两句