Hibernate ORM与JPA以及Spring Data JPA

本文解释了Java生态圈中HibernateORM、JPA(JavaPersistenceAPI)及SpringDataJPA之间的关系,指出HibernateORM是JPA的一种实现,而SpringDataJPA提供更高级别的抽象。JDBC、JPA和SpringDataJPA在数据库操作的抽象层次上逐步升高,降低了开发者的数据库思维负担。
摘要由CSDN通过智能技术生成

长期以来,Java生态圈的持久层解决方案竞争激烈,目前流行的方案有Hibernate ORM,Mybatis,JOOQ等,当然还有JPA及其Provoiders,以及随着Spirng Boot大热也同样发展迅速的Spring Data JPA。其实这些解决方案和技术有的在一个层面,有的在不同的层面,它们可能解决不同的问题而且相互补充和支持。但是这些概念和技术,尤其是名称相近的,也给开发者带来了很多疑惑,本文试图解释一下Hiberante ORM,JPA以及Spring Data JPA的关系。

首先, Hibernate是Java生态圈中,特别是在持久层这个领域是著名的厂商,最著名的产品是Hibernate ORM。以前是不需要带ORM的,直接说Hibernate,大家就知道指的是对象关系映射框架(ORM—Object-Relation Mapping),Hiberate已经延伸到其它产品领域,所以Hibernate ORM能专指它的ORM产品。所谓ORM,如果用一句话概括:把Java的面向对象的“对象”与关系型数据库中的“关系”进行对应和转换。

我们再来看下一下面这张图:

 

从下往上,最下面是数据库,与数据最近的是JDBC,是随着Java诞生就存在的数据库链接的标准和实现。早期的Java开发者都知道,使用 JDBC需要开发者“手动”将Java的面向对象的对象转换成数据库关系,即表结构,或者进行相反方向操作,而且要用string来拼SQL查询语句,非常麻烦。

JPA的全称是Java Persistence API,是随着EJB 3.0发布的一个标准(JSR 220),距今已有15年以上的历史。目前JPA最新的版本是3.1。从JPA2到JPA3,namespace都进行了修改,从Javax Pesistence API变成了Jakarta Persistence API从原来的,所以你import library的时候是jakarta.xxx.xxx而不是以前的javax.xxx.xxx。我想说的重点是:JPA是一个标准规范,并不是“实现”。大概有三、四个厂家进行了实现,其中最著名是Hibernate,还有EclipseLink,但好像用的人不多。JPA的目标是希望能达到:开发人员在开发的时候,少用关系的思维去想问题(avoid the need to “think relationally.”)。Spring Data JPA是Spring Data的一部分,它是更高层面的一个“抽象”,屏蔽了更多对表的具体操作,把对数据库的增删改查(CRUD操作)变得非常简单和自动化。说到这里,我们再看一下上图,注意箭头所指,越往上抽象层次越高,也就是离数据库的更远,对数据库的操作越聚焦于与之对应的“对象”而非“表的行或列”。而且从下到上,各个模块是相互支持和依存的关系。

到此我们基本说清楚了JDBC、JPA、SPRING DATA JPA之间的关系。我们再澄清或强调一下Hibernate ORM和JPA之之间的关系,见下图:

 Hibernate ORM实现的JPA Specification,同时它也有自己的Native API,理念上大同小异,后者功能还更多一些,在开发的时候你可以选择左边的路线,也可以选择右边的路线,但最好不要混用。现在业界新项目更多选择左边,因为它是业界事实de facto标准。

spring jpa.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值