国庆假期接近尾声,明天最后一天了,要开始收收心啦~今天讲讲一个初学者(或许一些老手)可能没去搞懂的几个概念:
Hibernate、JPA、Spring Data JPA 之间的关联。嘿嘿,前段时间有位同学说去大厂面试被问了这个。好了,话不多说,发车!
Hibernate
Hibernate 就不多介绍了, 一个 ORM 框架,它提供了 HQL 来屏蔽底层不同数据库厂商 SQL 之间的差异,大大提升了程序的可移植性。也提供了一套 Criteria API 来进行数据操作,使用这套 API 不需要关注底层 SQL 的实现,直接操作 API 即可。
JPA
JPA 是一个 Java 持久化规范,在 JDK 5 后提出的。它的提出主要是为了整合市面上已有的 ORM 框架,如 Hibernate、EclipseLink 等。官方觉得:你们搞框架可以,但是得按照我 Java 定的规矩来。只有统一了接口,我们程序员使用的时候才会便捷。但它只是一个规范,具体实现还是由这些 ORM 框架来完成。所以 JPA 的提出是为了屏蔽市面上各大 ORM 框架的差异,便于开发人员的使用。
Spring Data JPA:
虽然市面上很多 ORM 框架都实现了 JPA 规范,但它们基于 JPA 基础又做了一些扩展,这使得使用 JPA 的时候不能无缝切换底层的 ORM 框架。所以 Spring 又提出了 Spring Data JPA 。Spring Data JPA 符合 JPA 规范,但它是一个抽象层,上接 JPA 下接各大 ORM 框架,简化了持久层开发且屏蔽了各大 ORM 框架的差异,两个字,舒服。
总结
JPA 是规范,统一了规范才便于使用。
Hibernate 是 ORM 框架,它是 JPA 这个规范的一个实现。Spring Data JPA 则是 Spring 提出的,因为不同的 ORM 框架虽说有 JPA 规范约束,但是还是有不同的扩展,不易无缝替换,所以基于 JPA 添加了一个抽象层,来屏蔽不同 ORM 框架的差距。这其实类似于 Spring 自己定义一个标准来统一 Spring 对持久层的支持,这样对于我们这些在 Spring 使用 ORM 框架的开发来说,不需要管底层 ORM 怎么变了。