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