1 dainner_JDBC图1
2 百度百科jdbc图1
3 百度百科_jpa图1
JPA是sun提出的一个对象持久化规范,各JavaEE应用服务器自主选择具体实现。JPA 的目标之一是制定一个可以由很多供应商实现的API,并且开发人员可以编码来实现该API,而不是使用私有供应商特有的API。因此开发人员只需使用供应商特有的API来获得JPA规范没有解决但应用程序中需要的功能。尽可能地使用JPA API,但是当需要供应商公开但是规范中没有提供的功能时,则使用供应商特有的API。每个实现(Hibernate/toplink/open jpa)都定义了自己的映射定义或客户端 API。专家小组收集了所有这些工具中最好的,因此他们创建了 Java持久化API 标准。
Hibernate
JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个,应该说无人能出其右。从功能上来说,JPA就是Hibernate功能的一个子集。Hibernate 从3.2开始,就开始兼容JPA。Hibernate3.2获得了Sun TCK的JPA(Java Persistence API) 兼容认证。
JPA的设计者是Hibernate框架的作者,因此Hibernate作为Jboss 服务器中JPA的默认实现;Oracle的 Weblogic使用EclipseLink(以前叫TopLink)作为默认的JPA实现;IBM的Websphere和Sun的Glassfish默认使用OpenJPA(Apache的一个开源项目)作为其默认的JPA实现。(百度文库 spring Data jpa简介 - 百度文库 (baidu.com) https://wenku.baidu.com/view/edca78a5dc3383c4bb4cf7ec4afe04a1b071b0e5.html)
只要熟悉Hibernate或者其他ORM框架,在使用JPA时会发现其实非常容易上手。例如实体对象的状态,在Hibernate有自由、持久、游离三种,JPA里有new,managed,detached,removed,明眼人一看就知道,这些状态都是一一对应的。再如flush方法,都是对应的,而其他的再如说Query query = manager.createQuery(sql),它在Hibernate里写法上是session,而在JPA中变成了manager,所以从Hibernate到JPA的代价应该是非常小的
同样,JDO,也开始兼容JPA。在ORM的领域中,看来JPA已经是王道,规范就是规范。在各大厂商的支持下,JPA的使用开始变得广泛。
4 spring data jpa
4.1 版本1
上面这张关系图展示了这三者的关系。
- JPA(Java Persistence API)是规范,它指明了持久化、读取和管理Java对象映射到数据库表时的规范。
- Hibernate则是一个ORM框架,是一个针对 Java 环境的对象关系映射解决方案,它实现了Java对象到数据库表的映射,反之亦然。注意,JPA 是一个规范,而 Hibernate 是一个 JPA 提供者或实现。也就是说,Hibernate提供了JPA的实现。
- 说法1:Spring Data JPA是Spring Framework的一部分。它不是JPA的实现,而是在JPA之上提供更高层次的抽象,可以减少很多模板代码。Spring Data JPA 不是一个实现或 JPA 提供者,它只是一个抽象( JPA 数据访问抽象)。而Spring Data JPA的默认实现是Hibernate,当然也可以是其他的JPA Provider。请记住,Spring Data JPA总是需要 JPA 提供者,比如 Hibernate 或 eclipselink,没有 JPA 提供者,Spring Data JPA 无法工作。
说法2:Spring Data JPA不是JPA提供者。它是一个库/框架,在JPA提供者(如 Hibernate)的顶部添加了额外的抽象层。
4.对于 springdata,您可以使用 Hibernate、 Eclipse Link 或任何其他 JPA 提供者(程序)。
参考:
(1)csdn (29条消息) JPA、Hibernate、Spring Data JPA区别_chenzeyu110的博客-CSDN博客 JPA、Hibernate、Spring Data JPA区别_chenzeyu110的博客-CSDN博客
(2)JPA、Hibernate、Spring Data JPA 傻傻分不清? | LeeReindeer's blog JPA、Hibernate、Spring Data JPA 傻傻分不清? | LeeReindeer's blog
(3)Difference Between Hibernate and Spring Data JPA - DZone Java Difference Between Hibernate and Spring Data JPA - DZone Java
(4)What is the Difference Between JPA and Hibernate? (javaguides.net) What is the Difference Between JPA and Hibernate?
(5)JPA Tutorial - Java Persistence API (javaguides.net) JPA Tutorial - Java Persistence API(有jpa与hibernate具体代码实现的对比教程)
(6)java - What is the difference between Hibernate and Spring Data JPA - Stack Overflow https://stackoverflow.com/questions/23862994/what-is-the-difference-between-hibernate-and-spring-data-jpa/23863416#23863416
4.2 版本2
参考:JPA、Hibernate、Spring data jpa之间的关系,终于明白了 (baidu.com) JPA、Hibernate、Spring data jpa之间的关系,终于明白了