JPA或JDBC,它们有什么不同?
我正在学习Java EE,我用glassfish下载了eclipse。 我看了一些例子,还阅读了Oracle文档,以了解Java EE 5的全部内容。连接到数据库非常简单。 我打开了一个dynamic的web项目,创build了一个会话EJB,我用EntityManager和get方法可以访问存储的数据表。
对于我的下一个项目,我创build了一个简单的类,然后访问一些数据库表。 我遇到的第一个问题是,PersistenceUnit属性只能被EJB,Servlet等认可,而不是一个简单的java类。 那么我不能使用EntityManager的方式(或者我可以吗?)
我被要求去“JDBC”的方式。 我遇到的第一个问题是连接到数据库。 看来这一切都必须硬编码。 我有一个persistence.xml,我可以很容易地configuration数据库连接。 即使为DB设置驱动也很容易。 在JDBC中也没有get / set方法来访问表实体。
如何理解与JDBC相关的JPA和持久性? JPA是怎么想的? 为什么有set / get方法? 有人可以抛开这两者的本质,什么是没有“行话”的优点/缺点? 也请build议一些链接。 一个简单的谷歌searchJPA和JDBC的差异导致我一些网站充满了“术语”,我不能遵循:(
外行的条款:
-
JDBC
是数据库访问的标准 -
JPA
是ORM
一个标准
JDBC
是直接连接到数据库并运行SQL的标准,例如SELECT * FROM USERS等。数据集可以返回,你可以在你的应用程序中处理,你可以做所有常见的事情,比如INSERTS,DELETES,运行存储过程等。这是大多数Java数据库访问(包括JPA
提供者)背后的底层技术之一。
传统的JDBC
应用程序的一个问题是,你经常会遇到一些糟糕的代码,在这些代码中,数据集和对象之间会有很多映射,逻辑和SQL混合在一起。
JPA
是对象关系映射的一个标准。 这是一种允许您在代码和数据库表中的对象之间进行映射的技术。 这可以从开发人员那里“隐藏”SQL,这样他们处理的所有东西都是java类,而提供者允许您保存它们并以神奇的方式加载它们。 大多数情况下,XML映射文件或getter上的注释,setter可以用来告诉JPA提供程序对象上的哪些字段映射到DB中的哪些字段。 最着名的JPA提供者是Hibernate,因此是一个开始具体示例的好地方。
其他的例子包括OpenJPA,toplink等
在底层,Hibernate和JPA的大多数其他提供者编写SQL并使用JDBC来读取和写入数据库。
JPA和JDBC的主要区别在于抽象级别。
JDBC是与数据库交互的低级标准。 JPA是同样目的的更高级别的标准。 JPA允许您在应用程序中使用对象模型,这可以使您的生活变得更加轻松。 JDBC允许您直接对数据库做更多的事情,但需要更多的关注。 有些任务不能用JPA高效地解决,但可以用JDBC更高效地解决。
JDBC是一个比JPA更低级(和更老)的规范。 在这个基本要素中,JDBC是一个使用纯SQL进行数据库交互的API–发送查询和检索结果。 它没有对象或层次的概念。 在使用JDBC时,您需要将结果集(本质上是由SQL查询返回的一个或多个数据库表中的行/列matrix)转换为Java对象。
现在,要理解和使用JDBC,对SQL有一些了解和工作知识是非常重要的。 因此,还需要深入了解关系数据库是什么,如何使用它以及诸如表,列,键和关系等概念。 除非您至less对数据库,SQL和数据build模有基本的了解,否则您将无法充分利用JDBC,因为实际上这只是一个简单的抽象。
JDBC是JPA的前身。
JDBC是Java世界和数据库世界之间的桥梁。 在JDBC中,您需要公开CRUD操作所需的所有肮脏细节,例如表名,列名,而在JPA(使用下面的JDBC)时,还需要指定数据库元数据的这些细节,但使用Java注释。
因此,JPA为您创build更新查询并pipe理您查找或创build/更新的实体(它也做得更多)。
如果您想要在不使用Java EE容器的情况下执行JPA,那么Spring及其库可以使用相同的Java注释。