基本方法

Spring系列:JPA 常用接口和方法

 

方法定义规则

符号

含义

And

并且

Or

Is,Equals

等于

Between

两者之间

LessThan

小于

LessThanEqual  

小于等于

GreaterThan

大于

GreaterThanEqual

大于等于

After

之后(时间)>

Before

之前(时间)<

IsNull

等于Null

IsNotNull,NotNull

不等于Null

Like

模糊查询。查询件中需要自己加%

NotLike    

不在模糊范围内。查询件中需要自己加%

StartingWith

以某开头

EndingWith

以某结束

Containing

包含某

OrderBy

排序

Not

不等于

In

某范围内

NotIn

某范围外

TRUE

FALSE

IgnoreCase

忽略大小写

Spring系列:JPA 常用接口和方法

Spring系列:JPA 常用接口和方法 

 

 

Spring系列:JPA 常用接口和方法

 

解析原理

比如 findByUserAddressZip()。框架在解析该方法时,首先剔除findBy,然后对剩下的属性进行解析,详细规则如下(此处假设该方法针对的域对象为AccountInfo类型):

 

1.      先判断userAddressZip (根据 POJO 规范,首字母变为小写,下同)是否为AccountInfo 的一个属性,如果是,则表示根据该属性进行查询;如果没有该属性,继续第二步;

2.      从右往左截取第一个大写字母开头的字符串(此处为 Zip),然后检查剩下的字符串是否为AccountInfo的一个属性,如果是,则表示根据该属性进行查询;如果没有该属性,则重复第二步,继续从右往左截取;最后假设user 为AccountInfo 的一个属性;

3.      接着处理剩下部分(AddressZip ),先判断 user 所对应的类型是否有addressZip 属性,如果有,则表示该方法最终是根据 " AccountInfo.user.addressZip" 的取值进行查询;否则继续按照步骤 2 的规则从右往左截取,最终表示根据 " AccountInfo.user.address.zip" 的值进行查询。

 

可能会存在一种特殊情况,比如 AccountInfo包含一个 user 的属性,也有一个 userAddress 属性,此时会存在混淆。读者可以明确在属性之间加上 "_" 以显式表达意图,比如 "findByUser_AddressZip()" 或者"findByUserAddress_Zip()"。(强烈建议:无论是否存在混淆,都要在不同类层级之间加上"_" ,增加代码可读性)

 

官方文档

https://docs.spring.io/spring-data/jpa/docs/

 

相关文章: