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);