SpringData Jpa、Hibernate、Jpa 三者之間的關係

JPA規範與ORM框架之間的關係是怎樣的呢?

JPA規範本質上就是一種ORM規範,注意不是ORM框架——因爲JPA並未提供ORM實現,它只是制訂了一些規範,提供了一些編程的API接口,但具體實現則由服務廠商來提供實現,JBoss應用服務器底層就以Hibernate作爲JPA的實現。

既然JPA作爲一種規範——也就說JPA規範中提供的只是一些接口,顯然接口不能直接拿來使用。雖然應用程序可以面向接口編程,但JPA底層一定需要某種JPA實現,否則JPA依然無法使用。

從筆者的視角來看,Sun之所以提出JPA規範,其目的是以官方的身份來統一各種ORM框架的規範,包括著名的Hibernate、TopLink等。不過JPA規範給開發者帶來了福音:開發者面向JPA規範的接口,但底層的JPA實現可以任意切換:覺得Hibernate好的,可以選擇Hibernate JPA實現;覺得TopLink好的,可以選擇TopLink JPA實現……這樣開發者可以避免爲使用Hibernate學習一套ORM框架,爲使用TopLink又要再學習一套ORM框架。

下圖是JPA和Hibernate、TopLink等ORM框架之間的關係:

 

 JPA規範與ORM框架之間的關係

JPA和Hibernate的關係就像JDBC和JDBC驅動的關係,JPA是規範,Hibernate除了作爲ORM框架之外,它也是一種JPA實現。JPA怎麼取代Hibernate呢?JDBC可以驅動JDBC驅動嗎?

 

那麼Spring Data JPA與JPA規範的關係是怎樣的呢?

實現應用程序的數據訪問層已經很麻煩了好一陣子。太多的樣板代碼必須被寫入。Domain classes,並沒有被設計成面向一個真正的對象或領域驅動的方式。
使用spring data jpa能夠使豐富的Domain classes的持久性開發變得輕鬆很多,即使樣板代碼來實現存儲庫量特別還是相當高的。所以Spring data jpa的目標是簡化關於各種持久存儲數據訪問層而努力。
備註:Domain classes 指的是POJO類,例如數據庫中有一張表:Student,那麼我們會在程序中定義與之對應的Student.java,而這個Student.java就是屬於Domain classes。
Long story short, then, Spring Data JPA provides a definition to implement repositories that is supported under the hood by referencing the JPA specification, using the provider you define.
長話短說,Spring Data JPA 是在JPA規範的基礎下提供了Repository層的實現,但是使用那一款ORM需要你自己去決定。
我的理解是:雖然ORM框架都實現了JPA規範,但是在不同ORM框架之間切換是需要編寫的代碼有一些差異,而通過使用Spring Data Jpa能夠方便大家在不同的ORM框架中間進行切換而不要更改代碼。並且Spring Data Jpa對Repository層封裝的很好,可以省去不少的麻煩。
spring data jpa、jpa以及ORM框架之間的關係
發佈了93 篇原創文章 · 獲贊 134 · 訪問量 61萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章