本文主要用于阐述JPA,Hibernate,Spring Data JPA三者的关系和区别,比较偏理论。小编才疏学浅,如有理解偏颇之处,恳请各位大神给予指正,小编不胜感激!
1、ORM(Object Relational Mapping)
通过使用描述对象和数据库之间映射的元数据,将程序中的对象持久化到关系数据库中。本质上就将数据从一种形式转换到另一种形式。
ORM技术特点:
1.提高了开发效率。由于ORM可以自动对Entity对象与数据库中的Table进行字段与属性的映射,所以我们实际可能已经不需要一个专用的、庞大的数据访问层。
2.ORM提供了对数据库的映射,不用sql直接编码,能够像操作对象一样从数据库获取数据。
Java中典型的ORM框架有Hibernate,TopLink,OpenJPA等。
2、JPA(Java Persistence API)
JPA是Java EE5.0中提出的标准的ORM规范,使得应用程序以统一的方式访问持久层。为Java开发人员提供一种对象/关联映射工具来管理Java应用中的关系数据。出现的主要目的为了简化持久化开发工作和整合ORM技术,结束Hibernate,TopLink等ORM框架各自为营的局面。JPA充分吸收现有Hibernate,TopLink等ORM框架的基础上发展起来,具有易于使用,伸缩性强等特点。
3、Hibernate
ORM框架的一种,Hibernate是一个开源的ORM框架,对JDBC进行了非常轻量级的对象封装,使得Java程序员可以使用面向对象编程思想来操作数据库。Hibernate实现POJO和数据库表之间的映射,以及SQL的自动生成和执行。开发过程往往只需要定义好 POJO到数据库表的映射关系,即可通过Hibernate提供的方法完成持久层操作,甚至不需要对SQL熟练,Hibernate本身会根据指定的存储逻辑,自动生成对应的SQL并调用JDBC接口执行。
JPA和Hibernate的关系
JPA是一套规范,而不是一套产品,没有具体实现。Hibernate是一套产品,Hibernate实现了JPA规范,提供了针对JPA中API的接口实现,可以称Hibernate为JPA的实现产品。JPA不能取代Hibernate,这种关系就类似与JDBC不能取代JDBC驱动一样。
4、Spring Data JPA
Spring Data JPA本身不是一个标准ORM框架,Spring Data JPA是基于JPA,为了便捷使用而封装的一个框架。Spring Data JPA在JPA的规范下提供了Repository层的实现,但是具体使用哪一种ORM需要使用人员自己决定。虽然ORM框架来实现JPA规范,但是不同框架之间切换仍需要编写不通的代码,通过Spring Data JPA能够方便大家在不同ORM框架之间进行切换而不需要修改代码。极大的简化了数据库访问,可以通过命名规范、注解的方式较快的编写SQL,极大程度提高开发效率。
JPA和ORM的关系
JPA规范本质上是一种ORM规范,不是ORM框架。因为JPA本身没有提供ORM实现,只是指定了一些规范,提供一些编程API接口,具体的实现需要服务厂商来提供实现。JPA的出现只是用于规范现有ORM技术,不能取代现有ORM框架。相反采用JPA开发时,仍需要使用ORM框架,只是此时开发的应用不在依赖某个持久化提供商。应用可以在不修改代码的情况下,在任何JPA环境下运行,真正做到解耦合,可扩展的程序设计。JPA和ORM关系类似于JDBC,在JDBC出现以前针对特性的数据库API编程,而现在只需要针对JDBC API编程,这样能在不改变的情况下换成其他数据库。
总结
JPA是在Java5.0提出的持久化开发规范,是ORM规范;Spring Data JPA为了简化JPA使用在其基础上封装的框架;Hibernate是实现了JPA规范的具体实现,同时也是ORM框架的一种。