Hibernate, JPA 和 Spring Data JPA
我们都知道Java 持久层框架访问数据库的方式大致分为两种。
- 一种以 SQL 核心,封装一定程度的 JDBC 操作,比如: MyBatis。
- 另一种是以 Java 实体类为核心,将实体类的和数据库表之间建立映射关系,也就是我们说的 ORM框架,如:Hibernate、Spring Data JPA。
JPA
JPA的全称是Java Persistence API, 即Java持久化API,是SUN公司推出的一套基于ORM的规范。
它为Java开发人员提供了一种对象/关联映射工具,来管理Java应用中的关系数据,JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。很多ORM框架都是实现了JPA的规范,如:Hibernate、EclipseLink。
Java在操作数据库的时候,底层使用的其实是JDBC,而JDBC是一组操作不同数据库的规范。我们的Java应用程序,只需要调用JDBC提供的API就可以访问数据库了,而JPA也是类似的道理。
JPA统一了Java应用程序访问ORM框架的规范
JPA为我们提供了以下规范:
ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中
JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发人员不用再写SQL了
JPQL查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
Hibernate
Hibernate是一个JPA规范的具体实现,是ORM类型的框架,对象映射模型。
Hibernate是Java中的对象关系映射解决方案。对象关系映射或ORM框架是将应用程序数据模型对象映射到关系数据库表的技术。Hibernate 不仅关注于从 Java 类到数据库表的映射,也有 Java 数据类型到 SQL 数据类型的映射。
Hibernate 可以自动生成 SQL 语句,自动执行
关系
JPA规范本质上就是一种ORM规范,不是ORM框架,因为JPA并未提供ORM实现,JPA仅仅定义了一些接口
Hibernate除了作为ORM框架之外,它也是一种JPA实现。
Spring Data
Spring Data是Spring 社区的一个子项目,主要用于简化数据(关系型&非关系型)访问,其主要目标是使得数据库的访问变得方便快捷。
它提供很多模板操作
- Spring Data Elasticsearch
- Spring Data MongoDB
- Spring Data Redis
- Spring Data Solr
- 强大的 Repository,和定制的数据储存对象的抽象映射
- 对数据访问对象的支持
Spring Data JPA
接口的再次封装抽象更多的可用接口
Spring Data JPA是在JPA规范下提供了Repository层的再次封装,提供了更多可用的接口,然后底层通过Hibernate实现。
JPA是一种规范,Hibernate是一个实现了JPA规范的框架,Spring Data JPA是对JPA简化操作的实现,实现了更多可用的接口,底层具体实现用了Hibernate。
Spring Data JPA给我们提供的主要的类和接口
Repository 接口:
- Repository
- CrudRepository
- JpaRepository
Repository 实现类:
- SimpleJpaRepository
- QueryDslJpaRepository
以上这些类和接口就是我们以后在使用Spring Data JPA的时候需要掌握的。