天天看點

Spring Data JPA開發手冊——1.介紹《Spring Data JPA開發手冊——1.介紹》

版權聲明:本文為部落客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>對象從資料庫取回實體的方法。

資料倉庫的分層看起來如圖所示: