1. 概述

在本教程中,我们将了解Java 数据库连接 (JDBC) APIJava 持久性 API (JPA)之间的差异。

2. 什么是 JDBC

JDBC 是与数据库通信的 Java 应用程序的编程级接口。应用程序使用此 API 与 JDBC 管理器进行通信。它是我们的应用程序代码用来与数据库通信的通用 API。除了 API 之外,还有供应商为我们使用的数据库提供的、符合 JDBC 的驱动程序。

3.什么是JPA

JPA 是一个 Java 标准,它允许我们将 Java 对象绑定到关系数据库中的记录。 它是对象关系映射 ( ORM ) 的一种可能方法 ,允许开发人员使用 Java 对象检索、存储、更新和删除关系数据库中的数据。 JPA 规范有多种实现。

4.JPA 与 JDBC

在决定如何与后端数据库系统通信时,软件架构师面临着重大的技术挑战 。 JPA 和 JDBC 之间的争论通常是决定性因素,因为这两种数据库技术采用截然不同的方法来处理持久数据。让我们分析一下它们之间的主要区别。

4.1.数据库交互

JDBC 允许我们编写 SQL 命令来从关系数据库读取数据和更新数据。 与 JDBC 不同,JPA 允许开发人员利用面向对象的语义构建数据库驱动的 Java 程序 。 JPA 注释描述了给定的 Java 类及其变量如何映射到数据库中给定的表及其列。

让我们看看如何将 Employee 类映射到 员工 数据库表:

@Entity
@Table(name = "employee")
public class Employee implements Serializable {
    @Column(name = "employee_name")
    private String employeeName;
}

然后,JPA 框架会处理在面向对象的 Java 代码和后端数据库之间进行转换所需的所有耗时且容易出错的编码。

4.2.管理协会

当使用 JDBC 在查询中关联数据库表时,我们需要写出完整的 SQL 查询 ,而使用 JPA,我们只需使用注释来创建一对一、一对多、多对一等-对多关联

假设我们的 员工 表与 通讯 表具有一对多关系:

@Entity
@Table(name = "employee")
public class Employee implements Serializable {
 
    @OneToMany(mappedBy = "employee", fetch = FetchType.EAGER)
    @OrderBy("firstName asc")
    private Set communications;
}

该关系的所有者是 Communication ,因此我们使用 Employee 中的 mappedBy 属性使其成为双向关系。

4.3.数据库依赖

JDBC是依赖于数据库的,这意味着必须为不同的数据库编写不同的脚本。另一方面, JPA 与数据库无关,这意味着相同的代码 只需很少(或无需)修改即可用于各种数据库

4.4.异常处理

因为 JDBC 会抛出检查异常,例如 SQLException, 所以我们必须将其写在 try-catch 块中。 另一方面,JPA 框架仅使用未经检查的异常,例如 Hibernate 。因此,我们不需要在每个使用它们的地方捕获或声明它们。

4.5.表现

JPA 和 JDBC 之间的区别本质上在于由谁进行编码:JPA 框架还是本地开发人员。无论哪种方式,我们都必须处理对象关系阻抗不匹配的问题

公平地说,当我们错误地编写 SQL 查询时,JDBC 性能可能会非常缓慢。在这两种技术之间做出选择时,性能不应成为争论的焦点。专业开发人员完全有能力开发出无论使用何种技术都运行良好的 Java 应用程序。

4.6. JDBC 依赖关系

基于 JPA 的应用程序在底层仍然使用 JDBC。因此,当我们使用 JPA 时,我们的代码实际上是使用 JDBC API 来进行所有数据库交互。换句话说, JPA 作为一个抽象层,向开发人员隐藏了低级 JDBC 调用,从而使数据库编程变得更加容易

4.7.交易管理

在 JDBC 中,事务管理是通过使用提交和回滚来显式处理的。另一方面, JPA 中隐式提供了事务管理

5. 优点和缺点

与 JPA 相比,JDBC 最明显的好处是它更易于理解 。另一方面,如果开发人员不掌握 JPA 框架或数据库设计的内部工作原理,他们将无法编写出好的代码。

此外,许多开发人员认为 JPA 更适合更复杂的应用程序。但是,如果应用程序将使用简单的数据库并且我们不打算将其迁移到其他数据库供应商,则 JDBC 被认为是更好的选择。

对于开发人员来说,JPA 相对于 JDBC 的主要优点是,他们可以使用面向对象的原则和最佳实践来编写 Java 应用程序,而不必担心数据库语义。因此, 可以更快地完成开发,特别是当软件开发人员缺乏对 SQL 和关系数据库的扎实理解时

此外,由于经过充分测试且健壮的框架正在处理数据库和 Java 应用程序之间的交互,因此在使用 JPA 时,我们应该会看到数据库映射层的错误有所减少。

六,结论

在本快速教程中,我们探讨了 JPA 和 JDBC 之间的主要区别。

虽然 JPA 带来了许多优势,但如果 JPA 不能最好地满足我们当前的应用程序需求,我们还有许多其他高质量的替代方案可供使用。