在開始學習 Spring Data JPA 以前,首先討論下 Spring Data Jpa、JPA 和 Hibernate 以前的關係。程序員
JPA
JPA 是 Java Persistence API 的簡稱,中文名 Java 持久層 API,是 JDK 5.0 註解或 XML 描述對象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中。spring
Sun 引入新的 JPA ORM 規範出於兩個緣由:其一,簡化現有 Java EE 和 Java SE 應用開發工做;其二,Sun 但願整合 ORM 技術,實現天下歸一。數據庫
JPA 由 EJB 3.0 軟件專家組開發,做爲 JSR-220 實現的一部分。但它又不限於 EJB 3.0,你能夠在 Web 應用、甚至桌面應用中使用。JPA 的宗旨是爲 POJO 提供持久化標準規範,因而可知,通過這幾年的實踐探索,可以脫離容器獨立運行,方便開發和測試的理念已經深刻人心了。Hibernate 3.2+ 、TopLink 10.1.3以及 OpenJPA 都提供了 JPA 的實現。編程
JPA 的整體思想和現有 Hibernate、TopLink、JDO 等 ORM 框架大致一致。總的來講,JPA 包括如下 3 方面的技術:緩存
-
ORM映射元數據 : JPA 支持 XML 和 JDK 5.0 註解兩種元數據的形式,元數據描述對象和表之間的映射關係,框架據此將實體對象持久化到數據庫表中框架
-
API:用來操做實體對象,執行 CRUD 操做,框架在後臺替代咱們完成全部的事情,開發者從繁瑣的 JDBC 和SQL代碼中解脫出來。學習
-
查詢語言: 這是持久化操做中很重要的一個方面,經過面向對象而非面向數據庫的查詢語言查詢數據,避免程序的SQL 語句緊密耦合。測試
Hibernate
Hibernate 是一個開放源代碼的對象關係映射框架,對 JDBC 進行了很是輕量級的對象封裝,使得 Java 程序員能夠爲所欲爲地使用對象編程思惟來操縱數據庫,而且對象有本身的生命週期,着力對象與對象之間的關係,有本身的HQL 查詢語言,因此數據庫移植性很好。Hibernate是完備的 ORM 框架,是符合 JPA 規範的。Hibernate 有本身的緩存機制。從上手的角度來講比較難,比較適合企業級的應用系統開發。.net
JPA和Hibernate的關係?
-
1.JPA 是 hibernate 的一個抽象。hibernate
> JPA 是規範:JPA 本質上就是一種 ORM 規範,不是 ORM 框架 —— 由於 JPA 並未提供 ORM 實現他只是制定了一些規範,提供了一些編程的 API 接口,但具體實現則由 ORM 廠商提供實現 。 > > Hibernate 是實現:Hibernate 除了做爲 ORM 框架以外,它也是一種 JPA 實現。
-
2.從功能上來講,JPA 是 Hibernate 功能的一個子集。
Spring Data JPA
能夠理解爲 JPA 規範的再次封裝抽象,底層仍是使用了Hibernate 的 JPA 技術實現,引用 JPQL(Java Persistence Query Language)查詢語言,屬於Spring整個生態體系的一部分。隨着Spring Boot和Spring Cloud 在市場上的流行,Spring Data JPA也逐漸進入你們的視野,它們組成有機的總體,使用起來比較方便,加快了開發的效率,使開發者不須要關心和配置更多的東西,徹底能夠沉浸在Spring 的完整生態標準實現下。JPA上手簡單,開發效率高,對對象的支持比較好,又有很大的靈活性,市場的承認度愈來愈高。
Spring Data JPA和JPA的關係?
Spring Data JPA 是在 JPA 規範的基礎下提供了 Repository 層的實現,可是使用哪一款 ORM 須要你本身去決定;相比咱們更爲熟悉的 Hibernate 和 MyBatis, Spring Data JPA 能夠看作更高層次的抽象。 Spring 在作持久化這一塊的工做,開發了 Spring-data-xxx 這一系列包,如: Spring Data JPA, Spring Data Redis, Spring Data Mongodb 等等,這些都是 Spring 提供的基於 JPA 和其餘一些 NOSQL 的 Repository。
文章參考:
Spring Data JPA 從入門到精通書籍
https://spring.io/projects/spring-data
https://www.oschina.net/p/spring-data
https://www.ibm.com/developerworks/cn/opensource/os-cn-spring-jpa/