JPA規範介紹以及JPA、ORM框架以及Spring Data Jpa的關係

JPA介紹轉載於 http://blog.csdn.net/anxpp/article/details/51388436

JPA(Java Persistence API)是一種Java持久化解決方案,負責把數據保存到數據庫。

概述

JPA是存儲業務實體關聯的實體的來源。它顯示瞭如何定義一個面向普通Java對象(POJO)作爲一個實體,以及如何與管理關係實體。
在 EJB 3 之前,EJB主要包含三種類型:
- 會話Bean
- 消息驅動Bean
- 實體Bean

但自 EJB 3.0 開始,實體Bean被單獨分離出來,形成了新的規範:JPA。所以,JPA完全可以脫離 EJB 3 來使用。
知道了JPA的由來,那麼也就很清楚其實它就是一種標準、規範,而不是具體的實現(如Hibernate)。
JPA是Java官方提出的、隨Java EE 5 規範一同發佈的。在此之前,已經存在很多ORM框架了,他們都有不同的實現,這也是JAP出現的必然條件:
ORM框架的出現,使直接存儲對象成爲可能,它們將Java對象拆分成SQL語句,並利用JDBC保存到數據庫。但是不同的框架,使用起來卻是很大不同的,這也導致開發者需要學習各種不同的ORM框架(雖然你可能覺得精通一個ORM框架就夠了,但你也不能保證不會碰到需要維護別人的程序的時候,當然,他們很可能就使用了不同的框架)。而JAP規範,正式爲了解決這個問題:規範ORM框架,是ORM框架有統一的接口和用法。
至於規範,我們可以把它當作接口來理解,它規定了應該怎麼做,但不包含任何實現。所以JPA並不能單獨使用,必須指定實現了JPA的框架。
JAP既然已經解釋清楚了,好處就很顯然:程序不再依賴某個具體的ORM框架。比如:使用JPA+Hibernate的程序,簡單的修改配置,即可改爲JPA+TopLink,以爲它們都實現了JPA規範

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

以下引用於http://blog.csdn.net/u014421556/article/details/52635000

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層封裝的很好,可以省去不少的麻煩。
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章