00:00
咱来看一下这个g PA c specification inor接口,这个接口啊有一些特殊和另类,说它特殊和另类是因为它根本就不属于这个repsy体系。我们来看代码。那么我们刚刚学过这个叫jpaposity,它继承自piging and sortingsy。配电的sorting。继承字偶代码需要关联一下。Comments。Comments。好了。PIgEon and sorting repsy继承自crud repsy。C rudpsy继承自reposity,这是一个顶级接口,CTRLT,我们看,诶,这是他们的继承关系,这里边并没有我们要学这个。GPA接口。
01:02
没有它,那么我们这些接口里边的话呢,我们学了一个配置的salty,这里边我们可以实现通用的分页,我们来看一下这个车置代码。通用的分页。在这儿,我们只需要传入page number跟。Page size以及你需要排序的这个salt,直接调这个方法就可以实现分页,而你不需要去关心那个实体类具体是什么,无论是person。还是customer,还是product,等等等等都可以完成分页,但它却不能够完成通用的带查询条件的分页。再说一遍哈,我们想写一个通用的带查询条件的分页,现在这个呃,Page and sorting repository,这个find all方法达不到,谁可以实现呢?就是我们要讲的这个叫GPA specification exeor,我们来看一下这个接口。
02:08
这个接口里面有这样的五个方法,我们看到前四个是跟查询相关的,后边应该是计算一个总的记录数,那无论是哪一个都传入了一个specification。这个specification是实际上是封装了查询条件,那这个查询条件呢,是GPA criteria查询相关的那个查询条件。J criteria查询,我们讲harmle的时候,不是讲过那个criteria查询吗?啊,这是j PA criteria查询,Predict代表它的一个查询条件好的回来,那这里边呢,也有一个关于扉页的方法,我们从这个方法来说起。首先,我们要求我们的person。需要继承,这个叫。
03:02
GPA specor,它只需要传一个泛型,就是实体类的类型person control o。然后我们就可以来进行测试了,CTRLC测试一下。我们的目标是实现待查询条件的分拣。怎么办呢?诶调用它的。一个方法find哪个方法?这个方法。
04:04
好,这个方法呢,有两个参数。这个代表查询条件。封装了GPA tor查询的查询。条件,而这个呢,封装了请求分页的信息,封装了请求分页的信息,例如page number page size,还有这个我们前面已经学习过了,那返回的就是复印那个效果呗,那我于是我来写。先写个page request。等于new page request。
05:03
Page page number等于。我要找第三页,所以从零开始对吧?In page size等于五。搞定,然后呢,要写一个specification,注意这是一个接口person specification等于now,怎么写还不知道,我要返回的是一个,返回的是一个page。Person等于person。PS find all传入这两个参数。PI。好的,现在呢,主要的精力就放到了这个specification上面,通常使用specification,用它的匿名内部类通常使用。
06:10
Specification的,找一个看看效果,New specification。CTRL1加方法。我们看到这个里边的话呢,有。三个参数有一个返回值外没。其中这个返回值呢,是什么类型啊,Predict类型代表一个查询条件。好了,Root。Boot代表。查询的实体类。
07:00
就说你要查的是什么,就是它qua。这个query呢,实际上是一个c que型,我们可以从中得到。Root对象G。即告知。GPA查询要查询哪一个实体类还可以来添加查询条件还可以。结合ntt manager对象得到。最终查询到。Type。
08:00
Query对象这是我们的query,但是这个query呢,我们在这个方法里边啊,用的不多,用的不多,所以说这个是重点。这个是重点。它也是重点,这个CB是什么呢?这个CB实际上是criteria build对象,你看这名就知道了是吧。对象用于。创建curriculum相关对象的工厂。当然。可以从中获取。CH。中获取到predict对象,这是一个查询条件,好了写好了,那现在的话呢,我们就来研究一下它,那我这个查询条件是什么呢?我希望啊ID大于几可以吧,ID大于几。
09:19
说。ID大于五。的。条件,这就是我的一个条件,ID大于五,因为我这里边我只有这个ID可以比较是吧,当然也可以比这个Bo,那我们就开始比这个ID吧,ID大于几那好了。那我首先的话呢,我需要去创建这个。这是一个查询条件,我最终返回的就是这个pre,看到了吧?好了,我们说了,这个查询条件可以由build获取,我要的是一个大于GE。
10:01
T。不是大于等于哈,大于几呢,大于五。大于五,那第一个参数是什么呢?第一个参数是一个expression,谁大于五呢?我需要去。导航到那个导航到那个属性,好了,我们来看一个图。我们来看一个图,我要查的这个实体类呢,是root,刚才说了哈,这root要查的实体类,我可以由这个root导航到我的属性,比方说我有一个卡代表客户,客户呢有联系人,这个联系人呢是卡的一个属性,而这个name。是。Context是联系人的一个属性,那我就可以调root get到。Contact还可以继续get到name,这就是一个什么呀,属性导航的一个效果,跟这是一个支,这是一个分支,看到了吧,那于是我们首先我们需要导航到这是一个pass pass。
11:08
Cur查询这个不要pass,等于root.get我要导航到那哪啊ID,我说ID大于五。Predict返回。这个效果的话,我们就写完了,底下这些一样的给它复制过来。CTRLC。好,最后一个。我们需要看一下这个结果,看一下这个查询条件,大家看这是不是大于五啊。框查询这块也有这个大于五吧,所以说总的记录数是22条大于五嘛。大于五。大于五之后是22条。
12:01
当前。第几页?当前是第21页?这个不正常啊,怎么回事儿呢?我们来看一下我们后边这个代码。我们看到当前第几页这块怎么写的呀?我是不是写了个page.number加一呀,前面怎么了,前面是不是有个字符串啊,就这个结果是二,看到了吗?拿字符串一加变成了二,那个字符串再加一可不是21吗?所以说这块应该扩一下。程序是没问题的哈,这块有一个小瑕疵,那这块要是错的话,我们前面我们测试这个分页这块应该也错了,前面疏忽了,没有注意到。好的,那我这个程序的话呢,再重新的运行一下。诶,我们看到。
13:00
总记录数22,当前是第三页,我们回来。当前是第三页,没问题。总页数是五,一页显示五条记录。22条记录,那不是五页吗?从16开始的看一眼。应该是从大于五,所以说六到十是一页,11~15是一页,从16开始,OK,没问题,好了,当前页面呢,有五条记录挺好的。这个结果是正确的,那以上的话呢,就是我们给大家举的这个GPA specification ET这个。小例子,那这里面我们注意到我们用到了一个什么呀,用到了一个specification,我们看到了这个里边如何导航到我们对应的属性。是吧,如何去添加查询条件,如何返回这个查询条件,以及如何来调这个方法。
14:02
那实际上的话呢,我们这个GPA specification execu,这里面有五个方法,我们要是把这个方法会用的话,我们讲的是哪个呀,这这个吧,这个会用的话,其他的道理是一样的。我们就可以利用这个GPA specification execu去构建一个。通用的带查询条件的一个base。那我们需要动态的去构建这个specification,在项目中的话呢,我们会用到,我们到后边的话呢,也会说到。OK。
我来说两句