• JDBC和JPA之间的比较


    1. 概述

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

    2. 什么是JDBC

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

    3. 什么是JPA

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

    4. JDBC vs JPA

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

    4.1. 数据库交互

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

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

    1. @Entity
    2. @Table(name = "employee")
    3. public class Employee implements Serializable {
    4. @Column(name = "employee_name")
    5. private String employeeName;
    6. }

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

    4.2. 管理关联

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

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

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

    此关系的所有者是“通信”,因此我们在“员工”中使用 mapBy 属性使其成为双向关系。

    4.3. 数据库依赖

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

    4.4. 异常处理

    因为 JDBC 会引发已检查的异常(如 SQLException),所以我们必须将其写入一个尝试捕获块中。另一方面,JPA 框架仅使用未经检查的异常,如休眠。因此,我们不需要在使用它们的每个地方捕获或声明它们。

    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 时,我们应该看到数据库映射层的错误有所减少。

    6. 结论

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

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

  • 相关阅读:
    车辆大全和车牌识别系统毕业设计,车牌识别系统设计与实现,车牌AI识别系统论文毕设作品参考
    java毕业设计电力公司员工安全培训系统Mybatis+系统+数据库+调试部署
    【计算机视觉】24-Object Detection
    快速认识什么是:Docker
    学会Linux,看完这篇就行了!
    uniapp 配置网络请求并使用请求轮播图
    Minimum Snap闭式求解相关公式推导
    一张张截图教你使用gitee
    SpringBoot Event 观察者模式,实现业务解耦
    从输入一个网址到浏览器页面展示到底发生了什么
  • 原文地址:https://blog.csdn.net/allway2/article/details/127091592