JPA,spring data jpa和其他jpa框架的關係


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驅動嗎?

上面部分內容引用自:http://www.lxway.com/528201191.htm

 

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

StackOverFlow這個問答回答了這個問題,http://stackoverflow.com/questions/16148188/spring-data-jpa-versus-jpa-whats-the-difference

一下回復的原話的重要部分:

Implementing a data access layer of an application has been cumbersome for quite a while. Too much boilerplate code had to be written. Domain classes were anemic and haven't been designed in a real object oriented or domain driven manner.

Using both of these technologies makes developers life a lot easier regarding rich domain model's persistence. Nevertheless the amount of boilerplate code to implement repositories especially is still quite high. So the goal of the repository abstraction of Spring Data is to reduce the effort to implement data access layers for various persistence stores significantly.
實現應用程序的數據訪問層已經很麻煩了好一陣子。太多的樣板代碼必須被寫入。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框架之間的關
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章