一、背景
公司项目架构更新迭代,升级springboot1.X到springboot2.3.12,DB交互这块还是引用先前的ORM持久层的框架Hibernate。从spring-boot-start-jpa-data内所关联依赖的版本来看,Hibernate已经对应升级到了5.4.32.Final,说到Hibernate又不得说其定义规范的JPA。
二、概要
1、JPA:
全称Java Persistence API,SUN公司Java2E1.5后所提出的Java持久化的接口规范,注:仅仅是一种规范。我们都知道不同的数据库厂商都有自己的实现类,后来统一规范也就有了数据库驱动,我们使用Java来操作DB时,底层使用的都是JDBC,它就是操作不同数据库的一种规范。通过其提供的API就可以直接访问数据库,而JPA也是类似的道理。
具体包含哪些规范:
1. ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中。
2. JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发人员不用再写SQL了
3. JPQL查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。(实际开发中并不常见)
2、Hibernate
Hibernate是JPA规范的具体实现、对象映射模型,是ORM类型的持久层框架。在3.2开始兼容JPA,主要是通过三个组件来实现的。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的规范。
3、Spring Data JPA
Spring Data JPA可以理解为JPA的规范,在其基础上封装了一套更多的可用接口,便于其他ORM框架的直接引用,提高了开发效率。它只是一个抽象层,需要JPA提供实现程序,其底层就是使用Hibernate来实现。
三、扩展
MyBatis也是持久层框架但没有实现JPA,是Sql Mapping框架,和ORM框架设计思路并不一样,前者面向Sql,后者面向对象。
四、总结
一句话:JPA是一种定义规范,Spring Data JPA是JPA的规范,底层实现用的是Hibernate。