Spring Data JPA方法定義規范


Spring Data Jpa方法定義的規則: 

1)簡單條件查詢

      簡單條件查詢:查詢某一個實體類或者集合。

      按照Spring Data的規范的規定,查詢方法以find | read | get開頭,涉及查詢條件時,條件的屬性用條件關鍵字連接,要注意的是:條件屬性以首字母大寫。

      例如:定義一個Entity實體類:

classPeople{
       private String firstName;
       private String lastName;
}

      以上使用and條件查詢時,應這樣寫:findByLastNameAndFirstName(StringlastName,String firstName); 

注意:條件的屬性名稱與個數要與參數的位置與個數一一對應 

2)支持的關鍵字

      直接在接口中定義查詢方法,如果是符合規范的,可以不用寫實現,目前支持的關鍵字寫法如下:

 

3)查詢方法解析流程

      假如我們創建如下的查詢:findByUserDepUuid(),框架在解析該方法時,首先剔除findBy,然后對剩下的屬性進行解析,假設查詢實體為Doc。

  1. 先判斷userDepUuid (根據POJO(Plain Ordinary Java Object簡單java對象,實際就是普通java bean)規范,首字母變為小寫。)是否是查詢實體的一個屬性,如果根據該屬性進行查詢;如果沒有該屬性,繼續第二步。

  2. 從右往左截取第一個大寫字母開頭的字符串(此處為Uuid),然后檢查剩下的字符串是否為查詢實體的一個屬性,如果是,則表示根據該屬性進行查詢;如果沒有該屬性,則重復第二步,繼續從右往左截取;最后假設 user為查詢實體的一個屬性。

  3. 接着處理剩下部分(DepUuid),先判斷user所對應的類型是否有depUuid屬性,如果有,則表示該方法最終是根據 “Doc.user.depUuid” 的取值進行查詢;否則繼續按照步驟 2的規則從右往左截取,最終表示根據“Doc.user.dep.uuid” 的值進行查詢。

  4. 可能會存在一種特殊情況,比如 Doc包含一個user的屬性,也有一個 userDep 屬性,此時會存在混淆。可以明確在屬性之間加上 "_"以顯式表達意圖,比如"findByUser_DepUuid()" 或者"findByUserDep_uuid()"。

  特殊的參數: 還可以直接在方法的參數上加入分頁或排序的參數,比如:

Page<UserModel>findByName(String name, Pageable pageable);

List<UserModel>findByName(String name, Sort sort);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM