1、Spring Data JPA是什么?
它是Spring基于ORM框架、JPA規(guī)范封裝的一套JPA應(yīng)用框架,可使開發(fā)者用極簡的代碼即可實現(xiàn)對數(shù)據(jù)的訪問和操作。它提供了包括增刪改查等在內(nèi)的常用功能,且易于擴(kuò)展。學(xué)習(xí)并使用Spring Data JPA可以極大的提高開發(fā)效率。
2、Spring Data JPA有什么?
主要看看Spring Data JPA提供的編程接口。
- Repository:最頂層的接口, 是一個空接口,目的是為了統(tǒng)一所有的Repository的類型,且能讓組件掃描的時候自動識別。
- CrudRepository:Repository的子接口, 提供CRUD的功能。
- PagingAndSortingRepository:CrudRepository的子接口,添加分頁排序的功能。
- JpaRepository:PagingAndSortingRepository的子接口,增加批量操作等功能。
- JpaSpecificationExecutor:用來做復(fù)雜查詢的解耦庫。
接口繼承關(guān)系圖:

3、添加、修改、刪除操作
Spring Data JPA提供的JpaRepository接口包含了以下幾個常用的方法:
- delete 刪除或者批量刪除。
- findAll 查找所有。
- findOne 查找單個。
- sava 保存單個或批量保存。
- saveAndFlush 保存并刷新到數(shù)據(jù)庫。
4、查詢操作的基本實現(xiàn)
基于方法名解析的概念
JpaRepository支持接口規(guī)范方法名查詢。意思是如果在接口中定義的查詢方法符合它的命名規(guī)則,就可以不用寫實現(xiàn)。
例如:findByName這個方法表示從數(shù)據(jù)庫中查詢Name這個屬性等于xxx的所有記錄,類似于SQL語句:select * from xxTable where name=xxx這種形式。
這里有兩個重點:
1、方法名需要在接口中定義。
2、必須符合一定的命名規(guī)范。方法名構(gòu)造規(guī)范
構(gòu)造法:find+全局修飾+By+實體的屬性名稱+限定詞+連接詞+(其它實體屬性)+OrderBy+排序?qū)傩?排序方向
例如:findDistinctFirstNameIgnoreCaseAndLastNameOrderByAgeDesc(String firstName, String lastName){...}
其中:Distinct是全局修飾(非必須),F(xiàn)irstName和LastName是實體的屬性名,And是連接詞,IgnoreCase是限定詞,Age是排序?qū)傩裕珼esc是排序方向,限定詞和連接詞統(tǒng)稱為“關(guān)鍵詞”。目前支持的關(guān)鍵詞
常用詞如下:
全局修飾:Distinct、Top、First。
關(guān)鍵詞:IsNull、IsNotNull、Like、NotLike、Containing、In、NotIn、IgnoreCase、Between、Equals、LessThan、GreaterThan、After、Before...
排序方向:Asc、Desc。
連接詞:And、Or。
更多關(guān)鍵詞請查看官方在線文檔:Spring Data JPA參考文檔嵌套實體方法命名規(guī)則
構(gòu)造法:主實體中子實體的名稱+_+子實體的屬性名稱
例如:List<Person> findByAddress_ZipCode(ZipCode zipCode)
它表示查詢所有Address(地址)的zipCode(郵編)為指定值的所有Person(人員)列表。
【下一篇】:Spring Data JPA 實體詳解