当前位置: 首页 > 面试题库 >

JPA或JDBC,它们有何不同?

孟树
2023-03-14
问题内容

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

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

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

我如何了解JPA和与JDBC相关的持久性?JPA的目的是什么?为什么会有set /
get方法?有人可以阐明这两者的本质吗?没有“专业术语”的利弊是什么?还请提出一些链接。一个简单的Google搜索JPA和JDBC差异导致我进入一些我无法理解的充满“术语”的网站:(


问题答案:

用外行的话来说:

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

JDBC是用于连接到数据库直接和运行SQL反对标准-例如SELECT * FROM USERS,等可以返回的数据集,你可以在你的应用程序处理,你可以做所有常用的东西一样INSERTDELETE运行存储过程等它是大多数Java数据库访问(包括JPA提供程序)背后的基础技术之一。

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

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

其他示例包括OpenJPA,toplink等。

在后台,Hibernate和大多数其他JPA提供程序编写了SQL,并使用JDBC在数据库之间进行读写。



 类似资料:
  • 我正在学习Java EE和我下载的eclipse与glassfish相同。我看到了一些例子,也阅读了Oracle文档,以了解所有关于Java EE5的信息。连接到数据库非常简单。我打开了一个动态web项目,创建了一个会话EJB,我使用了EntityManager,并使用get方法可以访问存储的数据表。 对于下一个项目,我创建了一个简单类,然后访问一些DB表。我遇到的第一个问题是Persistenc

  • 虽然不是新手,但我正在尝试学习spring框架(又一次!)为了确定我真的明白这一点。我对核心Spring(DI)有相当的想法。现在,我将重点放在数据层上。 这些术语相同吗?即“Spring+Hibernate”是否与“Spring Data JPA”相同。如果不是,那么区别/相似点是什么? 我真的对这么多看似相似,但可能不同的术语/陈述(如上)感到困惑。

  • 使用PEP 557,将数据类引入python标准库。 它们使用了装饰器,它们应该是“带默认值的可变名称耦合”,但我不太清楚这到底意味着什么,以及它们与普通类的区别。 python数据类到底是什么?什么时候最好使用它们?

  • 问题内容: 我们有一个带有postgres枚举的postgres数据库。我们开始在应用程序中构建JPA。我们也有Java枚举,它反映了postgres枚举。现在最大的问题是如何让JPA一方面理解Java枚举,另一方面理解Postgres枚举?Java方面应该很容易,但是我不确定如何进行postgres方面。 问题答案: 这涉及进行多个映射。 首先,JDBC驱动程序将Postgres枚举作为PGOb

  • 问题内容: 直到几天前,我才听说过野车,在读完我的老师的Java书籍后,我仍然不确定它的用途以及为什么需要使用它。 比方说,我有一个超类和几个子类都,,,等…现在我需要有动物名单,我首先想到的会是这样的: 相反,我的同事们建议采取以下措施: 为什么要使用通配符而不是简单的泛型? 假设我需要一个get / set方法,应该使用前一种还是后一种?它们有何不同? 问题答案: 声明局部变量时,通配符没有多

  • JPA存储过程参数注释 https://docs.oracle.com/javaee/7/api/javax/persistence/StoredProcedureParameter.html 根据文档,它的类型是JDBC类型。 它应该是Java类型,因为它是类(不是 java.sql.Types.xxx 或JDBCType)?