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

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

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

既然JPA做爲一種規範——也就說JPA規範中提供的只是一些接口,顯然接口不能直接拿來使用。雖然應用程序能夠面向接口編程,但JPA底層必定須要某種JPA實現,不然JPA依然沒法使用。spring

從筆者的視角來看,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的目標是簡化關於各類持久存儲數據訪問層而努力。ide

備註: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.spa

長話短說,Spring Data JPA 是在JPA規範的基礎下提供了Repository層的實現,可是使用那一款ORM須要你本身去決定。

 

個人理解是:雖然ORM框架都實現了JPA規範,可是在不一樣ORM框架之間切換是須要編寫的代碼有一些差別,而經過使用Spring Data Jpa可以方便你們在不一樣的ORM框架中間進行切換而不要更改代碼。而且Spring Data Jpa對Repository層封裝的很好,能夠省去很多的麻煩。

spring data jpa、jpa以及ORM框架之間的關係

實現JPA接口也並不意味着能夠替代Hibernate,Hibernate的索引功能,緩存功能並無相應的接口,因此有些時候仍是須要Hibernate的。可是!凡是JPA能實現的功能都用JPA來實現,以此來減小框架之間的耦合性

相關文章
相關標籤/搜索