JPA規範與ORM框架之間的關係是怎樣的呢?
JPA規範本質上就是一種ORM規範,注意不是ORM框架——由於JPA並未提供ORM實現,它只是制訂了一些規範,提供了一些編程的API接口,但具體實現則由服務廠商來提供實現,JBoss應用服務器底層就以Hibernate做爲JPA的實現。java
既然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框架之間的關係:spring
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服務器
一下回復的原話的重要部分:app
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框架之間的關係
2016-01-22 11:00:09