JPA方法名命名規則

2021-09-11 06:18:11 字數 2461 閱讀 4804

1   and    並且

2   or      或

3   is,equals    等於

4   between      兩者之間

5   lessthan      小於

6   lessthanequal     小於等於

7   greaterthan     大於

8   greaterthanequal   大於等於

9   after    之後(時間) >

10  before    之前(時間) <

11  isnull        等於null

12  isnotnull,notnull   不等於null

13  like    模糊查詢。查詢件中需要自己加 %

14  notlike     不在模糊範圍內。查詢件中需要自己加 %

15  startingwith  以某開頭

16  endingwith    以某結束

17  containing   包含某

18  orderby  排序

19  not    不等於

20  in     某範圍內

21  notin    某範圍外

22  true    真

23  false    假

24  ignorecase  忽略大小寫

按照spring data 定義的規則,查詢方法以find|read|get開頭(比如find、findby、read、readby、get、getby),涉及條件查詢時,條件的屬性用條件關鍵字連線,要注意的是:條件屬性首字母需大寫。框架在進行方法名解析時,會先把方法名多餘的字首擷取掉,然後對剩下部分進行解析。

如果方法的最後乙個引數是 sort 或者 pageable 型別,也會提取相關的資訊,以便按規則進行排序或者分頁查詢。

比如findby

useraddresszip()。框架在解析該方法時:

(1)首先剔除 findby,然後對剩下的屬性進行解析,詳細規則如下(此處假設該方法針對的域物件為 accountinfo 型別):

先判斷 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()"。(強烈建議:無論是否存在混淆,都要在不同類層級之間加上"_" ,增加**可讀性)

舉例說明如下:

實體定義:對於乙個客戶實體cus,包含有name和***,均是string型別。

查詢方法定義:listfindbynameand***(string name,string ***);

使用時:dao.findbynameand***(null, "男");

後台生成sql片斷:where (cus0_.name is null) and cus0_.***=?

結論:當查詢時傳值是null時,資料庫中只有該字段是null的記錄才符合條件,並不是說忽略這個條件。也就是說,這種查詢方式,只適合於明確查詢條件必須傳的業務,對於動態查詢(條件多少是動態的,例如一般的查詢列表,由終端使用者使用時決定輸入那些查詢條件),這種簡單查詢是不能滿足要求的。

listfindby***orderbyname(string ***); //名稱正序(正序時,推薦此方式,簡單)

listfindby***orderbynameasc(string ***); //名稱正序(效果同上)

listfindby***orderbynamedesc(string ***); //名稱倒序

參考文章:

jpa方法名命名規則

一 常用規則速查 1 and 並且 2 or 或 3 is,equals 等於 4 between 兩者之間 5 lessthan 小於 6 lessthanequal 小於等於 7 greaterthan 大於 8 greaterthanequal 大於等於 9 after 之後 時間 10 be...

jpa命名規則

一 常用規則速查 1 and 並且 2 or 或 3 is,equals 等於 4 between 兩者之間 5 lessthan 小於 6 lessthanequal 小於等於 7 greaterthan 大於 8 greaterthanequal 大於等於 9 after 之後 時間 10 be...

c 獲取命名空間 類名 方法名

stacktrace ss new stacktrace true methodbase mb ss.getframe 1 getmethod 取得父方法命名空間 str mb.declaringtype.namespace n 取得父方法類名 str mb.declaringtype.name n...