00:00
好,那我们刚才呢,咱们是通过connection来处理了一对多的映射关系,那下面呢,那我们一对多映射关系的处理的第二种方式啊,分部查询一样的效果,对吧?然后呢,大家首先你也要想明白,我现在要来查询的是部门以及部门中所有的员工,那我可不可以通过两个步骤或者说多个步骤,然后来查询呢?是可以的,没有任何问题,对吧?然后首先咱们可以先查询出来部门信息,再通过部门的dad去查询该部门中所拥有的员工信息就可以了,所以说分部查询其实写的代码,其实大家会发现它都是固定的,然后但是呢,大家一定要知道,我们当前咱们要想把这一条完整的数据查询出来,它都需要有哪几个circle组成,这个大家注意啊,首先呢,那我们现在先在我们的dept map里面,然后咱们来写一下,咱们的第一步是先来查询部。
01:00
信息来啊,大家来看,然后我们现在咱们是通过咱们的分部查询,然后来查询咱们的部门,然后以及部门中所有的员工信息,OK,这是咱们分部查询的第一步,分步查询。分部查询第一步对吧?好,然后是查询部门信息,来查询部门信息OK啊行,那下面大家来看,那我们现在呢,咱们是不是应该也是dept返回值,然后叫做get de PT and EP,然后by step one。大家注意啊,我在这儿我跟大家刚刚才跟大家说过,对吧,然后我以部门表为主表,我的部门在前,我以员工表为主表,然后我的EP代签OK吧,好,那所以说括号大家来看,那我们在这咱们是不是也要通过咱们的一个DA来进行获取,对不对?A paramo,然后这里面是did OK,然后咱们来复制一下,那既然是分步查询,那所以说我们当前咱们的这个SQ语句是不是只需要来查询咱们当前的部门信息就行,需不需要查询这个部门所对应的员工呢?不需要啊,啊,Select的ID要跟方法名保持一致,然后咱们要通过result map来实现分布查询,而咱们的circleql语句非常简单,直接来查询,根据dad,然后来查询咱们的部门信息就可以啊,好,然后well dad等于井号大。
02:47
符号dad OK,行,那这个就是我们当前通过dad来查询部门信息,然后下面咱们来把咱们的result map来设置一下,这个比如说咱们就叫做de BD and EB by step,然后result map OK,啊,行,然后咱们要来处理的类型的话,那不用说,肯定还是第1PD对吧?然后这里面大家其实可以来简单的复制一下,比如说大家来看咱们把这个ID和result复制过来,对吧?因为这两个咱们不需要处理啊,这两个都是我们当前咱们的普通字段的一个映射,对吧?然后我们现在重点需要来处理的是不是应该是咱们的集合类型的属性。
03:30
那这个时候咱们要用的标签大家注意还是connection,然后跟我们多对一的模式是一模一样的,我们要来处理的属性EPS,通过select来设置咱们当前分布查询的circle的唯一标识,然后再通过我们当前咱们的卡,咱们的column,然后来设置我们当前分布查询的条件,为啥呀?大家想想,我们现在是不是要查询部门啊?我们查询完部门之后,要根据部门ID去查询它所对应的所有的员工,那我们是不是要以当前部门的dad作为条件,然后去查询dad所对应的员工信息?
04:16
对不对,所以说咱们当前分布查询的条件是谁,Dad这个大家一定要看好啊。雨彤老师,多对一和一对多都是通过dad作为条件吗?那没问题嘛,大家想一想,我查询完部门,要查部门所对应的员工,那因为我们的表关系是设置在哪的,是设置在员工表里面啊,所以说我现在是不是应该是来查询以dad为条件,然后来查询dad满足这个条件的员工信息,那不就是部门中的员工吗?那我在查询员工的时候,我要去查询部门,那我是不是应该也是以dad,我知道了员工的dad dad为条件去查询部门,那咱们查询出来的就是员工所对应的部门啊。
05:02
是不是啊,所以说大家注意啊,咱们的分部查询的条件仍然是did啊好,然后下面呢,我们因为我们的这个分部查询的第二步是查询员工信息的,所以说咱们在员工的map接口里面来写一下,大家注意,因为我们以后呢,对吧,毕竟我们这个一个map接口,一个映射文件和我们的一张表相对应,一个实体类相对应,所以说咱们的这些circle语句啊,建议大家还是要写在相对应的map接口和映射文件中的啊。好,然后我们先来找到咱们的这个来复制一下,把它给放到我们的map接口中,大家注意,这个是我们当前分布查询部门,以及部门中所有的员工,这是咱们分部查询的第几步呀,这是咱们分部查询的第二步,干什么?大家看看,大家想想应该怎么描述,是根据dad,然后来查询员工信息。
06:01
大家说是不是根据dad来查询,嗯,当前这个dad所对应的员工信息,那它的返回值必定得是一个list,为什么?因为我们要通过这个circle去查询出来的结果来为我们当前咱们的这个属性赋值,那这个属性它不就是一个例子的集合吗?所以说大家想想,既然它们两个现在是相对应的,那所以说。我是不是就一定要保证我们在这这个属性的类型一定要跟我们分部查询,咱们所查询出来的结果是一致的,对不对,所以说啊,大家看好,这是一个list的集合,泛型是EP,咱们叫做get dept and e by step two。大家来看啊,好,然后下面咱们要以什么为条件,In tIgEr类型的dad来作为条件,然后我们来给它加上一个a para,然后叫做dad,好,然后咱们来进行复制,放到我们当前咱们的映射文件中,咱们就放到最后啊。
07:10
行,然后大家来看这个circle去也简单对吧,因为我们现在要根据dad去查询部门去查询。他所对应的员工信息对不对。所以说咱们现在没有必要用map,咱们只需要用type就行。是不是只需要用result type就可以啊,所以说大家注意,在分步查询的时候,一般情况下只有咱们的第一步才需要去设置result map,咱们的第二步的话,一般都是result type就行,当然了,如果我们当前咱们的第二个步骤里面也有需要咱们分部查询的一些信息,那当然第二步的时候也是result map。OK吧,好啊行,就比如说我们下一个阶段,咱们再讲每年旅游的时候,对吧,然后我们需要来获取的,我们要进行一个五表联查,我们要去查询用户所对应的角色,角色所对应的权限,那因为用户和角色是多对多,角色和权限呢,也是一个多对多对吧?那所以说我们当前就需要来处理什么,处理两个多对多的关系,那这个时候大家注意,我们在实现咱们的这个功能的时候呢,然后我们就需要用到两个分布查询,才能把所有的数据查出来,这个大家注意啊。
08:30
好。Read the type应该等于谁emp就可以啊,行,然后下面大家来看select的星,然后from t_EP,然后while,大家注意这个时候要以谁作为条件,Dad作为条件,这个大家一定要看好啊,行,咱们现在是要根据dad去查询这个部门所对应的员工信息的,所以说一定要以dad作为条件啊。
09:00
好,然后那我们现在设置完了,那我们现在咱们的分布查询里面,大家说select里面来写的应该是谁,应该是咱们分步查询所对应的circle口的唯一标识,而唯一标识呢,就是咱们的命名空间点circle的ID,换句话来说就是map接口的全类名点方法名,所以说该怎么写大家应该都知道吧,点击右键copy references4,然后现在把咱们的circle给放到这就可以了。大家注意,然后呢,再把我们的result map的ID放到咱们的SQL语句中就行。好,然后下面呢,我们就可以来测试这个功能了啊,比如说大家来看复制一下。好,然后这个叫做by step by step by step,好,然后咱们要访问的方法呢,叫做by step one OK啊行,然后下面咱们来一个执行,大家看一下啊。
10:01
好,大家看执行了几个circleq,两个circleq先来查询了当前的部门信息,再根据部门的did去查询他所对应的员工信息,一共是两条,没有问题,OK吧?那当然呢,因为我们在讲多对一的映射关系的时候,咱们就说了我们开启了什么叫做延迟加载,那所以说我们在一对多的这个查询过程中,我们使用了分布查询,那它能不能实现延迟加载呢?大家来看点get de PT name,然后我们再来一个执行,如果有延迟加载,它是不是应该只会执行查询部门的S,大家看一下。没问题,对不对,好,所以说啊,大家注意,这个是我们分布查询的一个优点,也就是它能够实现延迟加载,我们去访问哪些信息,它才会去执行相对应的SQL,如果我们没有访问的话,它是不会执行这个SQ的。好,OK,那下面呢,那我们是不是当然也可以通过谁呀,也可以通过咱们的fetch type来手动设置我们当前某一个分布查询的立即加载或延迟加载,OK吧,跟咱们的多对一是一样的啊,比如说咱们在这来设置一个一格表示的是立即加载,那这个时候当我们再执行这个S口语句的时候,大家来看是不是就把所有的S口语句都输出了,都执行了。
11:27
没问题吧,好大家注意,这个就是我们通过咱们的分布查询来实现一对多的映射啊,然后这里面的属性,因为跟多对一里面的属性都是一样的,所以说咱们就不去写这个注释了啊,大家看好了,咱们在这写的有啊。好,大家看一下select来设置分布查询的circle的唯一标识,Column来设置分布查询的条件,F机type手动来设置咱们当前一个延迟加载的效果,对吧?好,然后等于lazy表示延迟加载,E表示的是立即加载,哎,好啊,这个大家注意。
我来说两句