00:00
好,那我们刚才呢,咱们是通过咱们的分布查询呢,来解决了咱们多对一的关系,那有的同学会说,老师我用一个SQL语句就能解决的问题,你为什么要让我用两个SQ句解决,那写的多麻烦呢,是不是?但是大家注意啊,首先呢,大家想其实这个也不是很麻烦,首先咱们当前咱们的这两个SQL语句,你把它两个给放在一块,然后他们能实现一个完整的功能,你不把他们两个放在一块儿,那大家有没有发现他们各自就是一个功能,对不对,比如说呢,我们当前咱们如果我只执行,只访问我们当前咱们的这个SQL语句的话,那它获取的是不是应该是咱们的员工信息啊,那如果我只执行我们当前咱们的这个SQ语句的话,那他是不是应该是根据did来获取部门信息对不对,那当然呢,有的同学可能会说老师,那你执行这个方法的时候,那因为它是分步查询。
01:00
他不就直接将咱们的员工以及所对应的部门都查出来了吗?所以说这就是咱们分部查询的好处,咱们的分部查询可以实现什么呢?叫做延迟加载。什么叫延迟加载?就是我们刚才所说的功能,我当我们把来设置了咱们当前买be的延迟加载懒加载之后,如果我们当前只访问我们的员工信息,那他就只会去查询这一个SQ,而如果我现在来获取的是员工以及这个员工所对应的部门,那他就既会执行咱们的员工信息,又会既会执行咱们当前的员工的这个SQ,又会去执行咱们查询部门的SQL。什么意思呢?来咱们看效果啊,首先分布查询的好处叫做延迟加载,而延迟加载在我们当前的my be里面,它默认是不开启的,好,大家来看我们来找到我们的这一个笔记啊。
02:00
来大家来看一下咱们的分布查询,然后在这个地方大家看啊,在这给大家写的有啊,分布查询的优点可以实现延迟加载,但是必须在核心配置文件中去配,设置咱们的全局配置信息,那什么叫全局配置信息呢?很简单呀,就是我们刚才咱们设置把下划线映射为驼峰的这个settings标签。OK吧,然后呢,咱们的my be体中默认呢,然后大家注意它是不开启我们的这个延迟加载的,而如果我们当前咱们需要去开启的话,咱们需要来找到这两个属性,首先第一个属性叫lazy loading enabled,这个叫做延迟加载,是否延迟加载是否可用啊,然后呢,当开启的时候,咱们所有关联的对象都会延迟加载,什么叫关联的对象?其实就是我们分步查询的第二步以及第三步。能听懂吧,好,然后再往下的话,大家注意,然后这个也是来控制咱们的延迟加载的,而这个来获取的,它表示的是什么?它表示的它表示的是是否按需加载啊,是否按需加载,那我们要想来实现这个功能的话,大家注意我们需要干什么,咱们需要把它,然后来进行开启,我们需要把这个属性来进行关闭,为什么?因为大家看这个属性的描述啊,当开启时,任何方法的调用都会加载该对象的所有属性,对不对?那这个时候什么叫都会加载该对象的所有属性,也就是说哪怕我们把延迟加载给它开启了,然后,但是如果你把它也给开启的话,我们设置的延迟加载有效果吗?没有效果它并不会实现,我们访问员工则只查员工信息,我们访问部门,则查询部门信息。
03:53
OK吧,然后如果咱们把它开启的话,你如果访问的是员工的话,他也会将员工和部门全部都查询出来,所以说我们要想来实现延迟加载,大家需要把它设置为处,需要把它设置为false,那当然了,我们也可以来看一下我们的帮助手册,大家来看啊。
04:14
大家看一下,然后在这是咱们的lazy loadingemd,咱们看它的默认值false开启了吗?没有,但是咱们来看一下咱们的按需加载,按需加载的话,它默认是不是应该就是关闭的对不对?所以说我们现在要想来实现延迟加载的话,咱们只需要把lazy lazy loading enabled,把它给设置为true就可以啊,这个的话默认就是false,但是如果大家用的是咱们的3.4.1的话,那它默认的话是触,当然呢,这个版本的话就太低了,咱们现在用的是3.5.7的版本啊好,那下面呢,我们来看一下这个效果,比如说来咱们把这个属性呢复制一下来找到我们当前咱们的核心配置文件,然后呢,找到咱们的setting标签,大家看首先setting,然后把name,把lazy loading enabled。然后设置进去,然后咱们只要把它给开启就可以啊行,那这个东西是用来干什么的,大家注意。
05:14
它是用来开启咱们的延迟加载的,行,下面呢,我们就可以来实现咱们的功能了,那我们怎么来进行测试呢?大家看好了,那我们的延迟加载到底是干什么的?因为我们当前咱们来设置的延迟来我们来设置的分布查询是既能查询出来员工信息,然后又能根据咱们的分部查询的第二步来查询出来员工所对应的部门,那所以说我们现在咱们来获取了员工信息之后,是不是直接就把我们当前咱们的部门信息给查出来了,对不对?但是如果我现在我只获取我们的员工信息点,比如说咱们来获取了get e MP name。能看懂吧,然后这个时候我现在我来一个执行,大家会发现它只执行谁我们当前查询员工信息的这个SQ,而有没有执行咱们查询部门信息的circleq呢?没有,有同老师,那这跟之前的有什么不一样的吗?大家看好啊。
06:18
咱们把核心配置文件打开。我把开启延迟加载给它关闭掉。然后我们现在咱们再来执行,然后大家会发现,诶,我现在只获取了员工信息,但是他却把员工以及员工所对应的部门全部都查出来了,好,大家注意,这就我们的结果,这就是我们延迟加载的效果,OK吧,好,所以说呢,那我们的延迟加载表示的就是我们当前去访问的是哪些信息,那它就会去执行相对应的circle,而如果我们没有去访问的话,它就不会去执行。这个大家注意啊,行,然后下面呢,我们再往下看来,然后咱们如果说我现在我要来获取的是我的部门信息的话,这个时候会怎么办呢?来so,咱们在这呢,给它设置一设置一个分隔符,然后下面我再来获取我们当前ep.get de PT,大家来看我在这获取的是员工,在这儿获取的是部门,而如果我们现在没有去开启咱们的延迟加载的话,大家注意我们的SQ语句会先全部都执行,执行完之后,然后再我们再去获取其中的一些数据,来大家看好了啊。
07:34
来,我们现在一个执行,大家看搜Q区是不是一块执行的,先执行完了之后,我们是不是才可以获取我们所查询的数据,而如果我们现在咱们把咱们的这一个延迟加载呢?然后给它开启了,然后我们再来执行,大家会发现这个SQ去执行的顺序就不一样了呀,我们来获取员工,则执行员工的SQ,我们来获取部门,则执行部门的SQ,这就是咱们的延迟加载。
08:03
这个大家看好啊,行,然后那大家来看,那我们现在咱们把这个属性设置完之后,那对于我们当前买be的范围之内,所有的分布查询都会实现延迟加载的功能,但是呢,那有的功能咱们是不是也不需要实现延迟加载,那这个时候咱们该怎么办呢?大家注意,这个时候我们可以来找到我们的这个映射文件来,大家看好了啊,我们可以这样去写,这里面还有一个属性叫做fat type,那这个东西是用来干什么的呢?大家注意,因为我们当前咱们在我们的全局配置中来设置了开启延迟加载的功能之后,对于咱们所有的分布查询它都是会延迟加载的,而我们当前如果有些功能咱们不需要设置延迟加载,我们就可以通过咱们的这个属性来单独设置延迟或立即加载,比如说大家看好了,这里面lazy叫做延迟加。
09:03
加载,而如果你想设置立即加载的话,咱们可以设置这个一个它就是立即加载,大家看好,看来大家来看一下我现在是不是开启了延迟加载了,那它是不是应该对咱们所有的分布查询都有效果,对不对?而我现在呢,我在我的分布查询上,咱们设置了一个非tab属性之后,就可以立即将我们当前咱们的这一个分布查询设置为立即加载,或者说延迟加载,也就是说咱们可以通过这个属性使咱们的延迟加载变得可控。OK吧,好,大家看好我,现在我再来一个执行,大家会发现跟我们刚才的效果是不是不一样了。对不对,所以说啊fe type这个属性来。大家看啊好,然后这个属性是用来干什么的,然后当开启了全局的延迟加载,延迟加载之后,对吧,然后可通过词属性,然后手动控制咱们的延迟加载的效果。
10:12
效果,比如说咱们的fech type对吧,然后它一共有两个值,一个叫lazy,然后一个叫一个,但是大家注意,我在这给大家说的非常清楚啊,我说的是当开启全局延迟加载之后,也就是说如果你没有开启延迟加载的话,你这两个属性它都是一样的效果,都是立即加载,而如果我们当前开启了延迟加载,大家注意,那它默认的就是延迟加载的功能,而只有当我们设置成了一个才是立即加载,希望这个问题大家一定要想明白啊,行,然后这个大家看好,然后咱们这里面咱们的lazy表示什么?Lazy表示延迟加载。
11:00
对吧,然后咱们的E,然后来表示立即加载OK啊行,那这个是我们分布查询的一个好处,也就是延迟加载,这个大家注意啊。
我来说两句