JPA或JDBC,它们有何不同?

use*_*810 106 java jpa jdbc

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

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

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

我如何理解与JDBC相关的JPA和持久性?JPA想到了什么?为什么有set/get方法?有人可以对这两者的本质有所了解吗?没有"术语"的利弊是什么?还请建议一些链接.一个简单的谷歌搜索JPA和JDBC差异导致我的一些网站充满了"术语"我无法遵循:(

Mar*_*k D 204

通俗地说:

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

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

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

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

其他例子包括OpenJPA,toplink等.

在引擎盖下,Hibernate和大多数其他JPA提供程序编写SQL并使用JDBC来读写DB.

  • iBatis(现在的MyBatis)不是JPA实现.如果你看一下它,你会发现它确实有非常不同的概念. (3认同)
  • 并非所有JPA提供程序都编写SQL并使用JDBC ...因为它们可能会持久存在"不同类型的数据存储"(MongoDB,Neo4j等).DataNucleus JPA就是这样一个例子 (2认同)

gku*_*min 46

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

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


pap*_*pap 17

JDBC是比JPA更低级(和更旧)的规范.在它的基本要素中,JDBC是一个使用纯SQL与数据库交互的API - 发送查询和检索结果.它没有对象或层次结构的概念.使用JDBC时,您可以将结果集(实际上是SQL查询返回的一个或多个数据库表的行/列值矩阵)转换为Java对象.

现在,要理解和使用JDBC,您必须对SQL有一定的了解和工作知识.通过它,我们还可以深入了解关系数据库是什么,如何使用关系数据库以及表,列,键和关系等概念.除非您至少对数据库,SQL和数据建模有基本的了解,否则您将无法充分利用JDBC,因为它实际上只是在这些事物之上的一个薄抽象.


小智 9

JDBC是JPA的前身.

JDBC是Java世界和数据库世界之间的桥梁.在JDBC中,您需要公开CRUD操作所需的所有脏细节,例如表名,列名,而在JPA(使用下面的JDBC)中,您还要指定数据库元数据的这些详细信息,但使用Java注释.

因此,JPA会为您创建更新查询,并管理您查找或创建/更新的实体(它也会更多).

如果您想在没有Java EE容器的情况下执行JPA,那么Spring及其库可以与完全相同的Java注释一起使用.