00:00
下面我们来看一下这个query注解,首先说一下为什么需要使用这个注解呢?看一下我们之前定义的方法怎么定义的呀,使用spring data给的关键字跟实体的属性来定义这样的方法是吧?优点是。感觉比较简单。同时呢啊,看到这个方法名,我就知道这个方法是干什么的。缺点是。这个方法名可能会比较长,但更大的缺点是它不能够实现更复杂的查询,比方说我想搞一个带子查询的,他就搞不定。我想搞一个什么呢?我想做一个这样的查询,Person get max ID person get子查询的查什么呀?查询ID最大的那个person,查询ID值最大的那个person,这个时候我根据他给这个关键字就搞不定,因为我需要去定义一个子查询。
01:12
我先保存一下,大家看。报错了吧,那报的错跟前面是一样的,说这是一个非法的查询,找不到对应的属性。那怎么办呢?这个时候就需要我们自己去写那个JPQLJPQL就写到这个query。注解里边,然后这个宽注解呢,来修饰这个方法,Collect p from person p well。p.ID等于select。Max p.p two.id from person two写完了。
02:01
我们先来测试一下,然后的话呢,我们再来写对应的这个,呃,注释。Public taste。Query allocation。At person person等于。y.get markx ID person out person。走起。诶,我们发现这个语句是打印了,但这个测试没通过,这个语句怎么样,是不是带这个字查询的呀,测试没过是为什么呢?CTRLCCTRLV看一下为什么。看这个cosby,因为我尝试着把这个now值付给谁了。
03:02
付给了我person的address ID属性,看一眼,诶,我这个address ID呢,都是空是吧,我想把这个值赋给address ID属性,Person里边刚才为了测试我们搞了一个address ID是不是一个T型啊,我没有办法把那个now值赋给int性。但是我可以付给他家,可以付给修改一下。好的,这个时候就应该没有问题了。诶,测试通过。而且我们看到呢,我们查到的这个ID是26的,这个里边26条记录ID最大就是26,好了,这样的话呢,这个结果就搞定了。回来看一下这个宽注解,使用at query注解可以自定义JPQL语句,以实现更灵活的查询,这就是query注解的作用。
04:19
以及基本的使用方式。好了,关于这个快热注解呢,我们还需要注意以下的两个小环节。第一个环节。我如何来传递参数呢?纯餐我们来做一个测试哈,我搞到list,搞一组person queryno。At corry。看select p pro person p where p.last name等于。
05:05
问号。一。And p点一秒等于问号一秒,哎,这个时候的话呢,我这块用的是占位符一这块应该用占位符二第一种方式传递参数的方式。喂。Query注解传递参数的方式一使用占位符,这个时候我这里边儿这个参数是需要按这个顺序的,对吧,String。Last name string email,这个时候他需要按这个顺序,我们来测试一下。
06:03
Public VO。At least person。等于person report.test last name AA AA AA AA at。At硅谷点com feed out persons看效果。好了,这个结果是OK的,这是我们第一种传递的方式,使用占位符的方式,但这个时候这个参数怎么样?是不是必须得按这个顺序啊?第二种方式,我们可以使用命名参数的方式。
07:06
二。命名参数的方式,这个好处就是我们这个参数可以不按这个顺序。我们只需要。跟这个名字绑定就可以了,注意看根据这个名字相匹配,Last name。这个叫email,然后呢,我把这个放前边,我把这个放后边,然后我我得告诉这个是email加一个注解。Email这个也需要加一个注解,这个注解叫last name。
08:00
好的,看效果。CTRLC过来。Two。Out些杠,To email BA at,硅谷点com BA找一个。看一看能不能查到呢。当然是可以的,这是我们传递参数的第二种方式。关于纯参数,还有一个细节就是这个like list person query。No like PAR。
09:00
好的,我们依然写宽不解。注意看p from person p p.last name like。问号D。Or p.email like。问号二。好的,这个时候呢,我需要传递两个参数,Last name跟email,那这个时候这个参怎么传呢?在传参的时候啊,你就得带那个百分号了,是吧,因为这块你把这个参数直接给他了,我们看一眼。Public white at test list person等于person.test。
10:08
Like。这两个我给它复制过来。复制这个是吧。按顺序写的。好了,这个我写一个。BB。这个写个a like吗?Out persons.size先走一个。这个时候我们看到啊,这个是零是不是因为怎么了,因为你这块的话呢,我直接进行like,所以说这块你需要写这个百分号。再走。
11:02
这个数就可以了吧,两个两个,那实际上spring data允许我们把百分号写在。占位符的这个位置可以这样写。够方便吧,那这个时候的话呢,这上面我就不需要去写这个百分号了。这个我给它住掉。找一个。再看效果。OK。S允许在站位服务上添加摆放号。
12:06
实际上也可以是命名参数,我们再写一个啊,也可以是命名参数。给我写一个二吧,往前。命名参数应该这样写吧,这个写成last name。这个写成email,我把这个顺序的话呢,给它调换一下,把这个给它copy过来。CTRLC。CTRL非再测试。CTRLCCTRLV。把这个给它注掉,这个顺序调整一下。BBA,同时这块这个变成二再看。
13:01
诶,它也是OK的,看到了吧。所以说,对于like。我们在进行调用方法的时候,我们可以更加的轻松,我们直接传这个A和BB跟全在带百分号,这个A跟BB的话,是不是这个看着更爽一些啊,实际上后台已经帮我们。完成。好,以上是我们讲的关于宽注解全参的情况。还有一个需要注意的点,我们可以执行本地circle查询long。Get total count,我想获取总的记录数,注意,我要使用一个原生的circle查询。value等于select count,注意看啊,ID from GPA。Presence。
14:01
这么写的话,这是不是一个原生的circle啊,这个是表明吧。告他一声,原声的circle native query等于true设置。Native query等于true,既可以使用原生的SQL查询。既可使用。原生的circle查询好的。看一看效果哦。Public native query。Long court等于person Rep get total court his out court,走起看看效果。
15:02
没问题吧,26条,那我们这块做的查询呢,就是一个原生S口的查询。OK,我讲的内容啊,PPT上也有,大家也可以参看一下PPT。
我来说两句