Spring Data JPA方法定義規範【從零開始學Spring Boot】
視頻&交流平台】
https://study.163.com/course/introduction.htm?courseId=1004329008
https://412887952-qq-com.iteye.com/blog/2321532
事情的起因:有人問過我們這個這個問題:為什麼我利用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 係列博客】
視頻&交流平台:
https://study.163.com/course/introduction.htm?courseId=1004329008
https://412887952-qq-com.iteye.com/blog/2321532
網易雲課堂視頻最新更新:
第十一章 Spring Boot 日誌
1、spring boot日誌—理論
2、Spring Boot日誌-logback
3、Spring Boot日誌-log4j2
第十二章 Spring Boot 知識點2
1、spring boot 服務配置和部署
2、Spring Boot 定製URL匹配規則
曆史章節:
第一章 快速開始
1、Spring Boot之Hello World
2、Spring Boot之Hello World訪問404
第二章 Spring Boot之JSON
1、spring boot返回json數據
2、Spring Boot完美使用FastJson解析JSON數據
第三章 Spring Boot熱部署
1、Spring Boot熱部署(springloader)
2、springboot + devtools(熱部署)
第四章 Spring Boot數據庫
1、Spring Boot JPA/Hibernate/Spring Data概念
2、Spring Boot JPA-Hibernate
3、Spring Boot Spring Data JPA介紹
4、Spring Boot JdbcTemplate
5、Spring Boot集成MyBatis
第五章 web開發
1、全局異常捕捉
2、配置server信息
3、spring boot使用thymeleaf
4、Spring Boot 使用freemarker
5、Spring Boot添加JSP支持
第六章 定時任務
1、Spring Boot定時任務
2、Spring Boot 定時任務升級篇(動態修改cron參數)
3、Spring Boot 定時任務升級篇(動態添加修改刪除定時任務)
4、Spring Boot 定時任務升級篇(集群/分布式下的定時任務說明)
5、Spring Boot Quartz介紹
6、Spring Boot Quartz在Java Project中使用
7、Spring Boot 集成Quartz普通使用
8、Spring Boot 集成Quartz升級版
9、Spring Boot 集成Quartz二次升級版
10、Spring Boot 集成Quartz-Job如何自動注入Spring容器托管的對象
第七章 Spring Boot MyBatis升級篇
1、Spring Boot MyBatis升級篇-注解
2、Spring Boot MyBatis升級篇-注解-自增ID
3、Spring Boot MyBatis升級篇-注解-增刪改查
4、Spring Boot MyBatis升級篇-注解-分頁查詢
5、Spring Boot MyBatis升級篇-注解-分頁PageHelper不生效
6、Spring Boot MyBatis升級篇-注解- mybatic insert異常:BindingException: Parameter 'name' not found
7、Spring Boot MyBatis升級篇-注解- #和$符號特別篇
8、Spring Boot MyBatis升級篇-注解-@Result
9、Spring Boot MyBatis升級篇-注解-動態SQL(if test)-方案一:<script>
10、Spring Boot MyBatis升級篇-注解-動態SQL(if test)-方案二:@Provider
11、Spring Boot MyBatis升級篇-注解-動態SQL-參數問題
12、Spring Boot MyBatis升級篇-注解-特別篇:@MapperScan和@Mapper
13、Spring Boot MyBatis升級篇-XML
14、Spring Boot MyBatis升級篇-XML-自增ID
15、Spring Boot MyBatis升級篇-XML-增刪改查
16、Spring Boot MyBatis升級篇-XML-分頁查詢
17、Spring Boot MyBatis升級篇-XML-分頁PageHelper不生效
18、Spring Boot MyBatis升級篇-XML-動態SQL(if test)
19、Spring Boot MyBatis升級篇-XML-注解-初嚐試
20、Spring Boot MyBatis升級篇- pagehelper替換為pagehelper-spring-boot-starter
第八章 Spring Boot 知識點1
1、Spring Boot 攔截器HandlerInterceptor
2、Spring Boot啟動加載數據CommandLineRunner
3、Spring Boot環境變量讀取和屬性對象的綁定
4、Spring Boot使用自定義的properties
5、Spring Boot使用自定義的properties
6、Spring Boot使用@SpringBootApplication
7、Spring Boot 監控和管理生產環境
第十章 Spring Boot 打包部署
1、Spring Boot打包部署((提供Linux的sh文件))
第十一章 Spring Boot 日誌
1、spring boot日誌—理論
2、Spring Boot日誌-logback
3、Spring Boot日誌-log4j2
更多查看博客: https://412887952-qq-com.iteye.com/
最後更新:2017-11-10 17:34:06