本文已参与“新人创作礼”活动,一起开始掘金创作之路。
本文转载于:(234条消息) ORM-JPA-Hibernate_.南风.的博客-CSDN博客
总述
JPA本身是一种规范,它的本质是一种ORM规范,JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现,Hibernate属于遵循JPA规范的一种实现,但是JPA是Hibernate遵循的规范之一,Hibernate还有其他实现的规范。
ORM
ORM是一种思想
O代表的是Objcet
R代表的是Relative
M代表的是Mapping
ORM->对象关系映射....ORM关注是对象与数据库中的列的关系
JPA
JPA全称: Java Persistence API,JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。 JPA的出现有两个原因: 其一,简化现有Java EE和Java SE应用的对象持久化的开发工作; 其二,Sun希望整合对ORM技术,实现持久化领域的统一。
Sun之所以提出JPA规范,其目的是以官方身份来统一各种ORM框架的规范,包括著名的Hibernate、TopLink等 不过JPA规范给开发者带来了福音:开发者面向JPA规范的接口,但底层的JPA实现可以任意切换:觉得Hibernate好的,可以选择Hibernate JPA实现;觉得TopLink好的,可以选择TopLink JPA实现……这样开发者可以避免为使用Hibernate学习一套ORM框架,为使用TopLink又要再学习一套ORM框架 JPA提供的技术: (1)ORM映射元数据 JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持 久化到数据库表中; (2)JPA 的API 用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解 脱出来。 (3)查询语言 通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合
Hibernate
JPA是需要Provider来实现其功能的,Hibernate就是JPA Provider中很强的一个。
例如:
(1)实体对象的状态,在Hibernate有自由、持久、游离三种,JPA里有new,managed,detached,removed,而这些状态都是一一对应的。
(2)flush方法,都是对应的,
(3)Query query = manager.createQuery(sql),它在Hibernate里写法上是session,而在JPA中变成了 manager
JPA和Hibernate之间的关系
JPA和Hibernate之间的关系,可以简单的理解为JPA是标准接口,Hibernate是实现。
那么Hibernate是如何实现与JPA 的这种关系的呢?
Hibernate主要是通过三个组件来实现的,及hibernate-annotation、hibernate-entitymanager和hibernate-core。
(1)hibernate-annotation是Hibernate支持annotation方式配置的基础,它包括了标准的JPA annotation以及 Hibernate自身特殊功能的annotation。
(2)hibernate-core是Hibernate的核心实现,提供了Hibernate所有的核心功能。
(3)hibernate-entitymanager实现了标准的JPA,可以把它看成hibernate-core和JPA之间的适配器,它并不直接提供ORM的功能,而是对hibernate-core进行封装,使得Hibernate符合JPA的规范。