JPA和Spring Data
JPA
JPA是什么
- Java Persistence API:用于对象持久化的 API
- Java EE 5.0 平台标准的 ORM规范,使得应用程序以统一的方式访问持久层
JPA和Hibernate的关系
- JPA是hibernate的一个抽象(就像JDBC和JDBC驱动的关系)
- JPA 是规范:JPA 本质上就是一种 ORM 规范,不是ORM 框架,这是因为 JPA 并未提供 ORM 实现,它只是制订了一些规范,提供了一些编程的 API 接口,但具体实现则由 ORM 厂商提供实现;
- Hibernate 是实现:Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现
- 从功能上来说, JPA 是 Hibernate 功能的一个子集
JPA的供应商
JPA 的目标之一是制定一个可以由很多供应商实现的 API,Hibernate 3.2+、TopLink 10.1+ 以及 OpenJPA 都提供了 JPA 的实现,Jpa 供应商有很多,常见的有如下四种:
- Hibernate
JPA 的始作俑者就是 Hibernate 的作者,Hibernate 从 3.2 开始兼容 JPA。 - OpenJPA
OpenJPA 是 Apache 组织提供的开源项目。 - TopLink
TopLink 以前需要收费,如今开源了。 - EclipseLink
JPA的优势
-
标准化:提供相同的 API,这保证了基于JPA 开发的企业应用能够经过少量的修改就能够在不同的 JPA 框架下运行。
-
简单易用,集成方便:JPA 的主要目标之一就是提供更加简单的编程模型,在 JPA 框架下创建实体和创建 Java 类一样简单,只需要使用
javax.persistence.Entity
进行注解;JPA 的框架和接口也都非常简单。 -
可媲美JDBC的查询能力: JPA的查询语言是面向对象的,JPA定义了独特的
JPQL
,而且能够支持批量更新和修改、JOIN
、GROUP BY
、HAVING
等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。 -
支持面向对象的高级特性: JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,最大限度的使用面向对象的模型
SpringData
Spring Data 是 Spring 的一个子项目。用于简化数据库访问,支持NoSQL
和 关系数据存储。其主要目标是使数据库的访问变得方便快捷。Spring Data 具有如下特点:
-
SpringData 项目支持 NoSQL 存储:
MongoDB
(文档数据库)Neo4j
(图形数据库)Redis
(键/值存储)Hbase
(列族数据库) -
SpringData 项目所支持的关系数据存储技术:
JDBC
JPA -
Spring Data Jpa
致力于减少数据访问层 (DAO) 的开发量. 开发者唯一要做的,就是声明持久层的接口,其他都交给Spring Data JPA
来帮你完成! -
框架怎么可能代替开发者实现业务逻辑呢?比如:当有一个
UserDao.findUserById()
这样一个方法声明,大致应该能判断出这是根据给定条件的 ID 查询出满足条件的 User 对象。Spring Data JPA
做的便是规范方法的名字,根据符合规范的名字来确定方法需要实现什么样的逻辑。