一、背景

        公司项目架构更新迭代,升级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也是类似的道理。

springdatajpa整合hibernate_java

具体包含哪些规范:

        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来实现。

springdatajpa整合hibernate_hibernate_02

三、扩展

        MyBatis也是持久层框架但没有实现JPA,是Sql Mapping框架,和ORM框架设计思路并不一样,前者面向Sql,后者面向对象。

四、总结

        一句话:JPA是一种定义规范,Spring Data JPA是JPA的规范,底层实现用的是Hibernate。