EJB JPA数据库持久层开发实践详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 JPA(Java Persistence API)概述

JPA是基于Java持久化的解决方案,主要是为了解决ORM框架的差异,它的出现在某种程度上能够解决目前ORM框架之间不能够兼容的问题,对开发人员来说,能够更好地在JPA规范下进行系统开发。

1.3.1 什么是JPA

JPA全称为Java Persistence API,即Java持久化API,是Sun公司在Java EE 5规范中提出的Java持久化接口。JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。

如图1-3所示说明了JPA在系统架构中的作用,使用JPA持久化对象,而不是依赖于某一个ORM框架。

图1-3 JPA在系统架构中的作用

1.3.2 JPA的历史

JPA规范的起草和发布是JSR 220(Enterprise JavaBeansTM 3.0)官方发布的,其主页是http://www.jcp.org/en/jsr/detail?id=220。目前,JPA的规范被包含在EJB 3规范中,作为EJB持久化中的规范。

JPA规范从起草到最终发布,经历了以下几个阶段。

● 维护草案预览版(Maintenance Draft Review):2007年11月14日至2007年12月17日。

● 最终发布版(Final Release):2006年5月11日。

● 最终版投票(Final Approval Ballot):2006年4月18日至2006年5月1日。

● 建议最终草案版(Proposed Final Draft):2005年12月21日。

● 最终版投票(Final Approval Ballot):2006年4月18日至2006年5月1日。

● 公开核查版投票(Public Review Ballot):2005年8月9日至2005年8月15日。

● 公开核查版(Public Review):2005年6月27日至2005年8月15日。

● 早期草案版2(Early Draft Review 2):2005年2月8日至2005年3月10日。

● 早期草案版(Early Draft Review ):2004年6月30日至2004年7月30日。

● 专家组成立(Expert Group Formation):2003年6月10日至2004年3月24日。

● JSR投票(JSR Review Ballot):2003年5月27日至2004年6月9日。

目前,JPA 2.0(Java Persistence API 2.0)版本已在起草中,其对应的为标准是JSR 317。专家组计划将在2008年的第四季度与Java EE 6规范共同发布。

1.3.3 下载JPA规范

使用浏览器打开“http://java.sun.com/javaee/technologies/”,进入Sun的官方网站下载其规范。如图1-4所示,在该页面上可以下载EJB 3的规范,JPA的规范就包含在其中。

单击该页面的“Download spec”超链接,则进入到下载JPA规范的页面,如图1-5所示。

如果想要使用JPA,则下载图1-5中上方标注的链接;如果想要实现JPA,则下载下方标注的链接。由于实现JPA的规范内容更全面,建议读者下载下面的链接。

单击图1-4中的下载链接后,进入到的页面如图1-6所示。

该页面上有三个文件,其中图1-6中标注的部分为JPA的规范文档,单击该超链接即可下载。

图1-4 JPA规范官方主页

图1-5 下载JPA规范

图1-6 下载JPA规范

1.3.4 JPA的优势

事实上,JPA并不是一项技术,而是一种标准,因为JPA只是一套接口,本身不能完成任何事情。JPA只是规范了Java持久化的官方标准。JPA有以下几个优点。

● 可持久化Java对象。JPA能够直接持久化复杂的Java对象,并能够使用JPQL语言进行复杂的查询。JPQL是JPA专用的查询语言,是类似于SQL的面向对象的查询语言。

● 使用简单。JPA使用注释(Annotation)定义Java对象与关系数据库之间的映射,而传统的ORM多使用XML配置文件。JPA使用起来比ORM要方便。使用JPA不用关注底层使用什么数据库。

● 规范标准化。JPA是JCP组织发布的,是Java官方规定的统一的API。目前已经有多种框架实现JPA标准。使用了JPA的系统可以自由选择遵循JPA标准的框架,并能够自由更换。

● 事务性、大数据量。JPA底层使用关系数据库进行存储,因此具备关系数据库的特点,例如事务性、数据完整性、并发访问、大数据量等。

● 与其他持久化技术相比,JPA有很大的技术优势。表1-1列出了JPA与其他持久化技术的比较。

表1-1 JPA与其他持久化技术的比较

1.3.5 EJB 3与JPA的关系

由于历史的原因,EJB 3与JPA有着藕断丝连的关系。EJB 2.X中,EJB有三种类型的Bean,分别是会话Bean(Session Bean)、实体Bean(Entity Bean)和消息驱动Bean(Message Driven Bean)。

随着EJB 3规范的推出,EJB中的实体Bean(Entity Bean)逐渐被JPA规范所替代,这也正是为什么JPA的规范包含在EJB 3的规范中的原因。但JPA不仅能在EJB环境中使用,也能在J2SE的环境中使用,相对于EJB 2.X中的实体Bean,使用的范围更广阔。

总之,简单地说,JPA虽然出自EJB 3,但其使用的范围却大于EJB 3,不仅可用在Java EE 5.0的环境中,也可以应用在Java SE的环境中。如图1-7所示,清楚地表明了EJB 3与JPA的关系。

图1-7 EJB 3与JPA的关系

1.3.6 常见的实现JPA的框架

目前已经有多个ORM开源框架支持JPA,如Hibernate、TopLink、OpenJPA等。有关这些框架的内容,读者请参阅本书第14章。