JPA 或 JDBC,它们有何不同?

新手上路,请多包涵

我正在学习 Java EE,并为此下载了带有 glassfish 的 eclipse。我看了一些示例,还阅读了 Oracle 文档以了解有关 Java EE 5 的所有信息。连接到数据库非常简单。我打开了一个动态 web 项目,创建了一个会话 EJB ,我使用了 EntityManager 并使用 get 方法可以访问存储的数据表。

对于我的下一个项目,我创建了一个简单的类,然后访问了一些数据库表。我遇到的第一个问题是 PersistenceUnit 属性只能被 EJB、Servlet 等识别,而不是一个简单的 java 类。那么我就不能使用 EntityManager 方式(或者我可以吗?)

我被要求通过“JDBC”方式。我遇到的第一个问题是连接到数据库。似乎所有这些都必须硬编码。我有一个 persistence.xml,我可以用它轻松配置数据库连接。甚至为数据库设置驱动程序也很容易。 JDBC 中也没有用于访问表实体的 get/set 方法。

我如何理解与 JDBC 相关的 JPA 和持久性? JPA 的初衷是什么?为什么有设置/获取方法?有人可以阐明这两者的本质吗?没有“行话”的利弊是什么?还请推荐一些链接。在 google 上简单地搜索一下 JPA 和 JDBC 的区别,就把我带到了一些充满“术语”的网站,我无法理解 :(

原文由 user907810 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 485
2 个回答

通俗地说:

  • JDBC 是数据库访问的标准
  • JPA 是 ORM 的标准

JDBC 是直接连接到数据库并针对它运行 SQL 的标准 - 例如 SELECT * FROM USERS 等。可以返回数据集,你可以在你的应用程序中处理这些数据集,你可以做所有常见的事情,比如 INSERTDELETE ,运行存储过程等。它是大多数 Java 数据库访问(包括 JPA 提供程序)背后的底层技术之一。

传统 JDBC 应用程序的问题之一是,您经常会遇到一些糟糕的代码,其中会出现大量数据集和对象之间的映射,逻辑与 SQL 等混合在一起。

JPA 是对象关系映射的标准。这是一种允许您在代码和数据库表中的对象之间进行映射的技术。这可以对开发人员“隐藏”SQL,以便他们处理的都是 Java 类,并且提供者允许您保存它们并神奇地加载它们。大多数情况下,XML 映射文件或 getter 和 setter 上的注释可用于告诉 JPA 提供程序您的对象上的哪些字段映射到数据库中的哪些字段。最著名的 JPA 提供程序是 Hibernate ,因此它是开始具体示例的好地方。

其他示例包括 OpenJPA、toplink 等。

在幕后,Hibernate 和大多数其他 JPA 提供程序编写 SQL 并使用 JDBC 从 DB 读取和写入。

原文由 Mark D 发布,翻译遵循 CC BY-SA 4.0 许可协议

JPA 和 JDBC 之间的主要区别在于抽象级别。

JDBC 是与数据库交互的低级标准。 JPA 是用于同一目的的更高级别标准。 JPA 允许您在应用程序中使用对象模型,这可以让您的生活更轻松。 JDBC 允许您直接对数据库做更多的事情,但它需要更多的关注。有些任务不能使用 JPA 有效地解决,但使用 JDBC 可能会更有效地解决。

原文由 gkuzmin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题