What’s JPA
JPA(Jakarta Persistence API)是一个规范,定义了Java应用程序中持久性的一组概念。JPA提供了一个对象关系映射(ORM)层,允许开发人员使用Java对象进行工作,而无需手动转换对象导向范式和关系数据库之间的差异。JPA实现如Hibernate
和EclipseLink
处理Java对象和数据库表之间的转换,使开发人员免于编写底层JDBC代码。
What’s ORM
ORM是一项任务 - 开发人员有很好的理由手动避免执行这项任务。
像Hibernate
或EclipseLink
这样的框架将该任务编纂为一个库或框架,这就是ORM层。作为应用程序架构的一部分,ORM层负责管理软件对象与关系数据库中的表和列之间的转换。
在Java中,ORM层将Java类和对象转换为可以存储和管理在关系数据库中的形式。默认情况下,被持久化的对象的名称成为表的名称,字段成为列。一旦表设置好,每个表行都对应于应用程序中的一个对象。
Summary of ORM
ORM是一种将面向对象的数据模型映射到关系数据库模型的技术。
ORM层是实现这种映射的框架或库,它负责在应用程序代码和数据库之间进行转换,使开发人员无需手动编写JDBC代码。
下图说明了JPA和ORM层在应用程序开发中的作用。
How to Do
使用一个栗子来感受一下,不使用JPA和使用JPA的差异
定义一个简单的数据 Java 类 Musician
|
|
Musician
类用于保存数据。它可以包含诸如名称字段之类的基本数据类型,也可以包含对其他类(如Instrument
和ArrayList
)对象的引用关系。
Musician
类的主要目的是保存数据。
这种类型的类有时被称为DTO(数据传输对象)。DTO是软件开发中的一个常见特征。它们可以保存各种类型的数据,但不包含任何业务逻辑。
Non-JPA
这时候,如果要去查询或者操作数据库,代码应该如下
|
|
上方代码和业务场景耦合度相当高。georgeHarrison
对象可以来自任何地方(前端提交、外部服务等),并且其ID和名称字段已设置。对象上的字段用于提供SQL插入语句的值。(PreparedStatement
类是JDBC的一部分,提供了一种安全地将值应用于SQL查询的方法。)
虽然JDBC提供了手动配置所带来的可控性,但与JPA相比它更加繁琐。要修改数据库,您首先需要创建一个SQL查询,将Java对象映射到关系数据库中的表。您随后还需要在对象签名发生变化时修改SQL。使用JDBC,维护SQL本身就成为程序员的一项任务,而这个与业务逻辑相距甚远。
Use-JPA
|
|
手动SQL替换为单行代码entityManager.save()
,这会告诉JPA需要持久化该对象。从此以后,框架会处理SQL转换。
因此程序员无需离开面向对象编程的范围。
Supplementary
Java Data Objects
Java Data Objects (JDO)是一个标准化的持久性框架,它与JPA的主要区别在于在对象中支持持久性逻辑,以及它长期以来对非关系数据存储的支持。 JPA和JDO足够相似,以至于JDO提供程序通常也支持JPA。 请访问 Apache JDO Project 了解更多关于JDO与JPA和JDBC等其他持久性标准的信息。
Other Articles
JPA(Java Persistence API)是 Java 标准中的一套ORM规范
提供了一些编程的 API 接口,具体实现由 ORM 厂商实现,如Hiernate、TopLink 、Eclipselink等都是 JPA 的具体实现
借助 JPA 技术可以通过注解或者XML描述【对象-关系表】之间的映射关系,并将实体对象持久化到数据库中(即Object Model与Data Model间的映射)。
JPA是Java持久层API,由Sun公司开发,希望规范、简化Java对象的持久化工作,整合ORM技术,整合第三方ORM框架,建立一种标准的方式,目前也是在按照这个方向发展,但是还没能完全实现。在ORM框架中,Hibernate框架做了较好的 JPA 实现,已获得Sun的兼容认证。
JPA 的优势:
-
开发者面向 JPA 规范的接口,但底层的JPA实现可以任意切换:觉得Hibernate好的,可以选择Hibernate JPA实现;觉得TopLink好的,可以选择TopLink JPA实现。
-
开发者可以避免为使用Hibernate学习一套ORM框架,为使用TopLink又要再学习一套ORM框架。
JPA为我们提供了以下规范:
- ORM映射元数据:JPA支持XML和注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中
- JPA的Criteria API:提供API来操作实体对象,执行CRUD操作,框架会自动将之转换为对应的SQL,使开发者从繁琐的 JDBC、SQL中解放出来。
- JPQL查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
After All
- JPA是一个定义Java应用程序持久性概念的规范
- JPA提供了一个ORM层,抽象了Java对象和关系数据库之间的转换
- 流行的JPA实现包括Hibernate和EclipseLink
Ref
https://www.infoworld.com/article/2259807/what-is-jpa-introduction-to-the-java-persistence-api.html