1. 程式人生 > >74. Spring Data JPA方法定義規範【從零開始學Spring Boot】

74. Spring Data JPA方法定義規範【從零開始學Spring Boot】

【從零開始學習Spirng Boot—常見異常彙總】

    事情的起因:有人問過我們這個這個問題:為什麼我利用Spring data jpa寫的方法沒有按照我想要的情況進行執行呢?我記得當時只是告訴他你你先看看Spring Data的命名規則吧。所以在這一小節把Spring Data方法定義的規則簡單說明下。

(1)簡單條件查詢

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

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

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

class People{

       private String firstName;

       private String lastName;

}

       以上使用and條件查詢時,應這樣寫:

findByLastNameAndFirstName(String lastName,String firstName); 

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

       那麼接下里我們看看Spring Data支援的關鍵字。

(2)支援的關鍵字

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



 

 

       好了這些關鍵詞具體大家可以自己去實戰下。接下里我覺得有必要說說Spring Data查詢方法解析流程。

(3)查詢方法解析流程

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

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

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

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

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

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

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

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

(4)結束語

       Spring Data確實博大精深,沒有實戰過,真的是沒法很靈活在專案中進行使用。在實際使用過程中,理論知道了但是還是會碰到很多的坑,這個就只能是熟能生巧了。

【Spring Boot 系列部落格】

相關推薦

74. Spring Data JPA方法定義規範開始Spring Boot

【從零開始學習Spirng Boot—常見異常彙總】     事情的起因:有人問過我們這個這個問題:為什麼我利用Spring data jpa寫的方法沒有按照我想要的情況進行執行呢?我記得當時只是告訴他你你先看看Spring Data的命名規則吧。所以在這一小節把Spr

8. 使用JPA儲存資料開始Spring Boot

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

Spring Boot使用模板freemarker開始Spring Boot(轉)

dep demo attach macro 使用 doctype com 地址 2016年 視頻&交流平臺:à SpringBoot網易雲課堂視頻http://study.163.com/course/introduction.htm?courseId=10

資料新增非同步解析重新整理大資料量redis (——)(三)Spring Boot普通類呼叫bean開始Spring Boot

部落格分類:  從零開始學Spring Boot 從零開始學Spring BootSpring Boot普通類呼叫bean    【視訊&交流平臺】 à SpringBoot視訊 http://stu

33. Spring Boot 監控和管理生產環境開始Spring Boot

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

(33)Spring Boot 監控和管理生產環境開始Spring Boot

spring-boot-actuator模組提供了一個監控和管理生產環境的模組,可以使用http、jmx、ssh、telnet等拉管理和監控應用。審計(Auditing)、 健康(health)、資料採集(metrics gathering)會自動加入到應用裡面。 首先,寫

103. Spring Boot Freemarker特別篇之contextPath開始Spring Boot

需求緣起:有人在群裡@我:請教群主大神一個問題,spring boot  + freemarker 怎麼獲取contextPath 頭疼死我了,網上沒一個靠譜的 。我就看看之前部落格中的 【Spring Boot使用模板freemarker】好像確實沒有介紹到在.ftl檔案

31. Spring Boot匯入XML配置開始Spring Boot

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

2. Spring Boot返回json資料開始Spring Boot

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

35. Spring Boot整合Redis實現快取機制開始Spring Boot

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

51. spring boot屬性檔案之多環境配置開始Spring Boot

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

(27)Spring Boot Junit單元測試開始Spring Boot

Junit這種老技術,現在又拿出來說,不為別的,某種程度上來說,更是為了要說明它在專案中的重要性。 那麼先簡單說一下為什麼要寫測試用例 1. 可以避免測試點的遺漏,為了更好的進行測試,可以提高測試效率 2. 可以自動測試,可以在專案打包前進行測試校驗 3. 可以及時發現因為

40. springboot + devtools(熱部署)開始Spring Boot

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

104. Spring Boot 啟動流程分析第三篇開始Spring Boot

問題的提出:Spring Boot不像spring需要定義xml檔案檔案,那麼spring boot是如何在沒有配置檔案的情況下為我們啟動一個完整的WEB工程的呢。我們先@SpringBootApplication開始分析下這個啟動流程,原始碼取自:1.4.1.RELEAS

(4)Spring Boot完美使用FastJson解析JSON資料開始Spring Boot

個人使用比較習慣的json框架是fastjson,所以spring boot預設的json使用起來就很陌生了,所以很自然我就想我能不能使用fastjson進行json解析呢? 引入fastjson依賴庫:   <dependencies>         <

65.什麼是IOC?開始Spring Boot

【從零開始學習Spirng Boot—常見異常彙總】        這個小節吧,是無意當中看了一篇文章,覺得介紹的特別好,引用到我的部落格中,讓大家也樂下。那麼他是怎麼解說IOC的呢?看如下: 套用好萊塢的一句名言就是:你呆著別動,到時我會找你。  什麼意思呢?就好比一個皇帝和太監  有一天皇

41. Spring Boot 使用Java程式碼建立Bean並註冊到Spring開始Spring Boot

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

78. Spring Boot完美使用FastJson解析JSON資料開始Spring Boot

【原創文章,轉載請註明出處】        個人使用比較習慣的json框架是fastjson,所以spring boot預設的json使用起來就很陌生了,所以很自然我就想我能不能使用fastjson進行json解析呢? 引入fastjson依賴庫:   <depen

43. Spring Boot動態資料來源(多資料來源自動切換)開始Spring Boot

【視訊&交流平臺】 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=40000000

(19)Spring Boot 新增JSP支援開始Spring Boot

【來也匆匆,去也匆匆,在此留下您的腳印吧,轉發點贊評論;       您的認可是我最大的動力,感謝您的支援】 看完本文章您可能會有些疑問,可以檢視之後的一篇部落格: ----------------------------------------------------