JPA或JDBC,它们有何不同?

2022-08-31 07:33:03

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

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

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

如何理解 JPA 和持久性与 JDBC 的关系?JPA是出于什么目的?为什么有设置/获取方法?有人可以对这两者的本质进行一些阐述吗?如果没有“行话”,利弊是什么?也请建议一些链接。在谷歌上搜索JPA和JDBC的差异,我找到了一些充满“术语”的网站,我无法遵循:(


答案 1

通俗地说:

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

JDBC是直接连接到数据库并对其运行SQL的标准 - 例如,等等。可以返回可在应用中处理的数据集,并且可以执行所有常规操作,如 、 、 运行存储过程等。它是大多数Java数据库访问(包括JPA提供程序)背后的底层技术之一。SELECT * FROM USERSINSERTDELETE

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

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

其他例子包括OpenJPA,toplink等。

在引擎盖下,Hibernate和大多数其他JPA提供程序编写SQL并使用JDBC在数据库之间读取和写入。


答案 2

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

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


推荐