版權聲明:本文為部落客chszs的原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/chszs/article/details/42737553
《Spring Data JPA開發手冊——1.介紹》
作者:chszs,轉載需注明。部落格首頁:
http://blog.csdn.net/chszs我發現網上幾乎沒有講述Spring Data JPA原理的文章,很多Guide一上來就是如何配置,接着就是幾大段代碼,沒有一篇文章能把Spring Data JPA原理及構成說清楚的。是以,我寫了這個系列的文章。
用Java Persistence API庫建立持久層是很繁瑣的,也很耗時,而且需要大量的樣闆代碼。我們可以通過以下步驟消除一些樣闆代碼:
1)建立一個抽象的基類,它提供了對實體的CRUD操作。
2)建立繼承此基類的具體操作類。
這種方法的問題是,我們仍然要編寫建立資料庫查詢和調用它們的代碼。更糟糕的是,當我們要建立新的資料庫查詢時,我們還是要這麼做一次。這太浪費時間了。
如果我告訴你,我們可以在建立JPA持久層時無需編寫任何樣闆代碼,你信不?
Spring Data JPA可以幫助我們做到這一點。Spring Data JPA官網聲稱:
實作應用程式的資料通路層一直是很繁瑣的,總是要寫很多的樣闆代碼來執行簡單的查詢,比如分頁、審計。Spring Data JPA旨在改進資料通路層的實作,減少開發時間。開發者在編寫資料庫接口時,包括自定義的查詢方法,Spring Data JPA會自動提供其實作。
本文介紹了Spring Data JPA,下面讓我們開始吧。
一、什麼是Spring Data JPA
Spring Data JPA不是一個JPA實作,它是一個架構或庫,提供了JPA Provider之上的一個額外的抽象層。如果我們決定使用Spring Data JPA,那麼應用程式的後端部分至少會包含三層:
1)Spring Data JPA
Spring Data JPA提供了JPA Provider的抽象層。
2)Spring Data Commons
Spring Data Commons提供了共享的基礎構件。
3)JPA Provider
Java Persistence API的實作。
看起來Spring Data JPA使我們的應用程式變得更複雜,從某些方面來說确實如此。但是要明白,Spring Data JPA減少了我們編寫樣闆代碼的時間。
項目持久層的結構如圖所示:
二、Spring Data Repositories介紹
Spring Data JPA依賴于Spring Data Commons——它是一個資料庫抽象層,提供了共享的資料庫基礎構件。
我們使用Spring Data JPA時無需關注任何資料庫抽象層的實作,但必須熟悉Spring Data資料庫接口。這些接口的描述如下:
1、Spring Data Commons提供了如下接口
1)Repository<T, ID extends Serializable>接口
它是一個标記接口,有兩個目标:
一是捕獲托管實體的類型和實體ID的類型
二是在類路徑掃描期間,幫助Spring容器找到具體的資料倉庫接口。
2)CrudRepository<T, ID extends Serializable>接口
提供了對托管實體的CRUD操作。
3)PagingAndSortingRepository<T, ID extends Serializable>接口
提供了對從資料庫取回的實體的分頁和排序操作方法。
4)QueryDslPredicateExecutor<T>接口
此接口不是資料倉庫接口。它聲明了通過查詢DSL謂詞對象檢索資料庫的方法。
2、Spring Data JPA提供了如下接口
1)JpaRepository<T, ID extends Serializable>接口
它是一個JPA特定的資料倉庫接口,是Commons資料倉庫接口背後的單一接口聲明的方法組合。
2)JpaSpecificationExecutor<T>接口
此接口不是資料倉庫接口。它聲明了通過使用JPA标準API的Specification<T>對象從資料庫取回實體的方法。
資料倉庫的分層看起來如圖所示: