書名: EJB JPA數(shù)據(jù)庫持久層開發(fā)實踐詳解作者名: 馮曼菲等編著本章字?jǐn)?shù): 1592字更新時間: 2018-12-29 15:14:01
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章。
- 教父母學(xué)會上網(wǎng)
- 數(shù)據(jù)運(yùn)營之路:掘金數(shù)據(jù)化時代
- 21天學(xué)通ASP.NET
- WordPress Theme Development Beginner's Guide(Third Edition)
- Windows 7寶典
- 我也能做CTO之程序員職業(yè)規(guī)劃
- ESP8266 Robotics Projects
- Linux系統(tǒng)下C程序開發(fā)詳解
- Puppet 3 Beginner’s Guide
- 常用傳感器技術(shù)及應(yīng)用(第2版)
- Getting Started with Tableau 2019.2
- Flink內(nèi)核原理與實現(xiàn)
- 服務(wù)器配置與應(yīng)用(Windows Server 2008 R2)
- 設(shè)計中的人因:34個設(shè)計小故事
- ORACLE數(shù)據(jù)庫技術(shù)實用詳解