java - JPA 或 JDBC,它们有何不同?

标签 java jpa jdbc

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

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

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

我如何理解与 JDBC 相关的 JPA 和持久性? JPA 的初衷是什么?为什么有 set/get 方法?有人可以阐明这两者的本质以及没有“行话”的利弊吗?还请建议一些链接。一个简单的谷歌搜索 JPA 和 JDBC 差异让我找到了一些充满“术语”的网站,我无法理解:(

最佳答案

通俗地说:

  • 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。

关于java - JPA 或 JDBC,它们有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11881548/

相关文章:

java - Android 蓝牙打印未按预期工作

java - 通过 Groovy 脚本访问 Java 局部变量

java - Spring-Data JPA 持久化未引用的实体

java - doGet() servlet 中带参数的多个 if else 语句

java - Android Studio : Can't resolve imports (android. 支持。*)

Java 标准构建器查询不为空或为空

java - apache tomcat 服务器上的数据库 postgresql

java - 如何从 SQLException 对象获取 SQLException 原因

java.sql.SQLException : OALL8 is in an inconsistent state on JBoss 6. 1 EAP

java - JDBC + 脚本运行器 : java. lang.NullPointerException