官术网_书友最值得收藏!

1.3 JPA(Java Persistence API)概述

JPA是基于Java持久化的解決方案,主要是為了解決ORM框架的差異,它的出現(xiàn)在某種程度上能夠解決目前ORM框架之間不能夠兼容的問題,對開發(fā)人員來說,能夠更好地在JPA規(guī)范下進(jìn)行系統(tǒng)開發(fā)。

1.3.1 什么是JPA

JPA全稱為Java Persistence API,即Java持久化API,是Sun公司在Java EE 5規(guī)范中提出的Java持久化接口。JPA吸取了目前Java持久化技術(shù)的優(yōu)點,旨在規(guī)范、簡化Java對象的持久化工作。

如圖1-3所示說明了JPA在系統(tǒng)架構(gòu)中的作用,使用JPA持久化對象,而不是依賴于某一個ORM框架。

圖1-3 JPA在系統(tǒng)架構(gòu)中的作用

1.3.2 JPA的歷史

JPA規(guī)范的起草和發(fā)布是JSR 220(Enterprise JavaBeansTM 3.0)官方發(fā)布的,其主頁是http://www.jcp.org/en/jsr/detail?id=220。目前,JPA的規(guī)范被包含在EJB 3規(guī)范中,作為EJB持久化中的規(guī)范。

JPA規(guī)范從起草到最終發(fā)布,經(jīng)歷了以下幾個階段。

● 維護(hù)草案預(yù)覽版(Maintenance Draft Review):2007年11月14日至2007年12月17日。

● 最終發(fā)布版(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)版本已在起草中,其對應(yīng)的為標(biāo)準(zhǔn)是JSR 317。專家組計劃將在2008年的第四季度與Java EE 6規(guī)范共同發(fā)布。

1.3.3 下載JPA規(guī)范

使用瀏覽器打開“http://java.sun.com/javaee/technologies/”,進(jìn)入Sun的官方網(wǎng)站下載其規(guī)范。如圖1-4所示,在該頁面上可以下載EJB 3的規(guī)范,JPA的規(guī)范就包含在其中。

單擊該頁面的“Download spec”超鏈接,則進(jìn)入到下載JPA規(guī)范的頁面,如圖1-5所示。

如果想要使用JPA,則下載圖1-5中上方標(biāo)注的鏈接;如果想要實現(xiàn)JPA,則下載下方標(biāo)注的鏈接。由于實現(xiàn)JPA的規(guī)范內(nèi)容更全面,建議讀者下載下面的鏈接。

單擊圖1-4中的下載鏈接后,進(jìn)入到的頁面如圖1-6所示。

該頁面上有三個文件,其中圖1-6中標(biāo)注的部分為JPA的規(guī)范文檔,單擊該超鏈接即可下載。

圖1-4 JPA規(guī)范官方主頁

圖1-5 下載JPA規(guī)范

圖1-6 下載JPA規(guī)范

1.3.4 JPA的優(yōu)勢

事實上,JPA并不是一項技術(shù),而是一種標(biāo)準(zhǔn),因為JPA只是一套接口,本身不能完成任何事情。JPA只是規(guī)范了Java持久化的官方標(biāo)準(zhǔn)。JPA有以下幾個優(yōu)點。

● 可持久化Java對象。JPA能夠直接持久化復(fù)雜的Java對象,并能夠使用JPQL語言進(jìn)行復(fù)雜的查詢。JPQL是JPA專用的查詢語言,是類似于SQL的面向?qū)ο蟮牟樵冋Z言。

● 使用簡單。JPA使用注釋(Annotation)定義Java對象與關(guān)系數(shù)據(jù)庫之間的映射,而傳統(tǒng)的ORM多使用XML配置文件。JPA使用起來比ORM要方便。使用JPA不用關(guān)注底層使用什么數(shù)據(jù)庫。

● 規(guī)范標(biāo)準(zhǔn)化。JPA是JCP組織發(fā)布的,是Java官方規(guī)定的統(tǒng)一的API。目前已經(jīng)有多種框架實現(xiàn)JPA標(biāo)準(zhǔn)。使用了JPA的系統(tǒng)可以自由選擇遵循JPA標(biāo)準(zhǔn)的框架,并能夠自由更換。

● 事務(wù)性、大數(shù)據(jù)量。JPA底層使用關(guān)系數(shù)據(jù)庫進(jìn)行存儲,因此具備關(guān)系數(shù)據(jù)庫的特點,例如事務(wù)性、數(shù)據(jù)完整性、并發(fā)訪問、大數(shù)據(jù)量等。

● 與其他持久化技術(shù)相比,JPA有很大的技術(shù)優(yōu)勢。表1-1列出了JPA與其他持久化技術(shù)的比較。

表1-1 JPA與其他持久化技術(shù)的比較

1.3.5 EJB 3與JPA的關(guān)系

由于歷史的原因,EJB 3與JPA有著藕斷絲連的關(guān)系。EJB 2.X中,EJB有三種類型的Bean,分別是會話Bean(Session Bean)、實體Bean(Entity Bean)和消息驅(qū)動Bean(Message Driven Bean)。

隨著EJB 3規(guī)范的推出,EJB中的實體Bean(Entity Bean)逐漸被JPA規(guī)范所替代,這也正是為什么JPA的規(guī)范包含在EJB 3的規(guī)范中的原因。但JPA不僅能在EJB環(huán)境中使用,也能在J2SE的環(huán)境中使用,相對于EJB 2.X中的實體Bean,使用的范圍更廣闊。

總之,簡單地說,JPA雖然出自EJB 3,但其使用的范圍卻大于EJB 3,不僅可用在Java EE 5.0的環(huán)境中,也可以應(yīng)用在Java SE的環(huán)境中。如圖1-7所示,清楚地表明了EJB 3與JPA的關(guān)系。

圖1-7 EJB 3與JPA的關(guān)系

1.3.6 常見的實現(xiàn)JPA的框架

目前已經(jīng)有多個ORM開源框架支持JPA,如Hibernate、TopLink、OpenJPA等。有關(guān)這些框架的內(nèi)容,讀者請參閱本書第14章。

主站蜘蛛池模板: 高碑店市| 兴业县| 荥阳市| 乐陵市| 师宗县| 维西| 灌云县| 宜黄县| 福建省| 张家界市| 广河县| 新巴尔虎左旗| 会宁县| 永济市| 盘锦市| 鹿泉市| 晴隆县| 湘乡市| 新沂市| 遂川县| 田林县| 茌平县| 磐安县| 来安县| 桐庐县| 马边| 乐业县| 鄂托克前旗| 郯城县| 容城县| 靖西县| 黔南| 桂东县| 左云县| 南部县| 贵阳市| 常山县| 兴业县| 澜沧| 浦江县| 潼南县|