Spring Data JPA方法定義規範

Spring Data Jpa方法定義的規則: java

1)簡單條件查詢框架

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

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

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

classPeople{
       private String firstName;
       private String lastName;
}

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

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

2)支持的關鍵字接口

      直接在接口中定義查詢方法,若是是符合規範的,能夠不用寫實現,目前支持的關鍵字寫法以下:字符串

 

3)查詢方法解析流程get

      假如咱們建立以下的查詢: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);

相關文章
相關標籤/搜索