问题
我正在学习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的差异导致我的一些网站充满了"术语"我无法遵循:(
#1 热门回答(148 赞)
Layman的条款:
JDBC是数据库访问的标准
JPA是ORM的标准
JDBC是直接连接到数据库并对其运行SQL的标准 - 例如,可以返回数据集,你可以在应用程序中处理这些数据集,并且可以执行所有常见操作,如INSERTS,DELETES,运行存储这是大多数java数据库访问(包括JPA提供程序)背后的基础技术之一。
传统JDBC应用程序的一个问题是,你可能经常会遇到一些糟糕的代码,其中数据集和对象之间存在大量映射,逻辑与SQL混合等等。
JPA是对象关系映射的标准。这是一种允许你在代码和数据库表中的对象之间进行映射的技术。这可以从开发人员"隐藏"SQL,以便他们处理的所有内容都是java类,并且提供程序允许你保存它们并神奇地加载它们。大多数情况下,getter,setter上的XML映射文件或注释可用于告诉JPA提供程序你的对象映射到DB中的哪些字段。最着名的JPA提供者是Hibernate,因此是开始具体示例的好地方。
其他例子包括OpenJPA,toplink等。
在引擎盖下,Hibernate和大多数其他JPA提供程序编写SQL并使用JDBC来读取和写入数据库。
#2 热门回答(37 赞)
JPA和JDBC之间的主要区别在于抽象级别。
JDBC是与数据库交互的低级标准。 JPA是出于同样目的的更高级别标准。 JPA允许你在应用程序中使用对象模型,这可以使你的生活更轻松。 JDBC允许你直接使用数据库执行更多操作,但需要更多关注。使用JPA无法有效解决某些任务,但使用JDBC可以更有效地解决这些任务。
#3 热门回答(13 赞)
JDBC是比JPA更低级(和更旧)的规范。在它的基本要素中,JDBC是一个使用纯SQL与数据库交互的API - 发送查询和检索结果。它没有对象或层次结构的概念。使用JDBC时,你可以将结果集(实际上是SQL查询返回的一个或多个数据库表的行/列值矩阵)转换为Java对象。
现在,要理解和使用JDBC,你必须对SQL有一定的了解和工作知识。有了它,还需要深入了解关系数据库是什么,如何使用它以及表,列,键和关系等概念。除非你至少对数据库,SQL和数据建模有基本的了解,否则你将无法充分利用JDBC,因为它实际上只是在这些事物之上的薄抽象。