<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    常言笑的家

    Spring, Hibernate, Struts, Ajax, RoR

    JPA是什么

    定義 Java Persistence API
    JPA通過JDK 5.0注解或XML描述對象-關(guān)系表的映射關(guān)系,并將運(yùn)行期的實體對象持久化到數(shù)據(jù)庫中。

    起源

    Sun引入新的JPA ORM規(guī)范出于兩個原因:其一,簡化現(xiàn)有Java EE和Java SE應(yīng)用的對象持久化的開發(fā)工作;其二,Sun希望整合對ORM技術(shù),實現(xiàn)天下歸一。
    JPA由EJB 3.0軟件專家組開發(fā),作為JSR-220實現(xiàn)的一部分。但它不囿于EJB 3.0,你可以在Web應(yīng)用、甚至桌面應(yīng)用中使用。JPA的宗旨是為POJO提供持久化標(biāo)準(zhǔn)規(guī)范,由此可見,經(jīng)過這幾年的實踐探索,能夠脫離容器獨(dú)立運(yùn) 行,方便開發(fā)和測試的理念已經(jīng)深入人心了。目前Hibernate 3.2、TopLink 10.1.3以及OpenJPA都提供了JPA的實現(xiàn)。
    JPA的總體思想和現(xiàn)有Hibernate、TopLink,JDO等ORM框架大體一致。總的來說,JPA包括以下3方面的技術(shù):
    ORM映射元數(shù)據(jù)
    JPA支持XML和JDK 5.0注解兩種元數(shù)據(jù)的形式,元數(shù)據(jù)描述對象和表之間的映射關(guān)系,框架據(jù)此將實體對象持久化到數(shù)據(jù)庫表中;
    JPA 的API
    用來操作實體對象,執(zhí)行CRUD操作,框架在后臺替我們完成所有的事情,開發(fā)者從繁瑣的JDBC和SQL代碼中解脫出來。
    查詢語言
    這是持久化操作中很重要的一個方面,通過面向?qū)ο蠖敲嫦驍?shù)據(jù)庫的查詢語言查詢數(shù)據(jù),避免程序的SQL語句緊密耦合。

    JPA的優(yōu)勢

    1 標(biāo)準(zhǔn)化
    JPA 是 JCP 組織發(fā)布的 Java EE 標(biāo)準(zhǔn)之一,因此任何聲稱符合 JPA 標(biāo)準(zhǔn)的框架都遵循同樣的架構(gòu),提供相同的訪問 API,這保證了基于JPA開發(fā)的企業(yè)應(yīng)用能夠經(jīng)過少量的修改就能夠在不同的JPA框架下運(yùn)行。
    2 對容器級特性的支持
    JPA 框架中支持大數(shù)據(jù)集、事務(wù)、并發(fā)等容器級事務(wù),這使得 JPA 超越了簡單持久化框架的局限,在企業(yè)應(yīng)用發(fā)揮更大的作用。
    3 簡單易用,集成方便
    JPA的主要目標(biāo)之一就是提供更加簡單的編程模型:在JPA框架下創(chuàng)建實體和創(chuàng)建Java 類一樣簡單,沒有任何的約束和限制,只需要使用 javax.persistence.Entity進(jìn)行注釋;JPA的框架和接口也都非常簡單,沒有太多特別的規(guī)則和設(shè)計模式的要求,開發(fā)者可以很容易的 掌握。JPA基于非侵入式原則設(shè)計,因此可以很容易的和其它框架或者容器集成。
    4 可媲美JDBC的查詢能力
    JPA的查詢語言是面向?qū)ο蠖敲嫦驍?shù)據(jù)庫的,它以面向?qū)ο蟮淖匀徽Z法構(gòu)造查詢語句,可以看成 是Hibernate HQL的等價物。JPA定義了獨(dú)特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一種擴(kuò)展,它是針對實體的一種查詢語言,操作對象是實體,而不是關(guān)系數(shù)據(jù)庫的表,而且能夠支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能夠提供的高級查詢特性,甚至還能夠支持子查詢。
    5 支持面向?qū)ο蟮母呒壧匦?/strong>
    JPA 中能夠支持面向?qū)ο蟮母呒壧匦裕珙愔g的繼承、多態(tài)和類之間的復(fù)雜關(guān)系,這樣的支持能夠讓開發(fā)者最大限度的使用面向?qū)ο蟮哪P驮O(shè)計企業(yè)應(yīng)用,而不需要自行處理這些特性在關(guān)系數(shù)據(jù)庫的持久化。

    JPA的供應(yīng)商

    JPA 的目標(biāo)之一是制定一個可以由很多供應(yīng)商實現(xiàn)的API,并且開發(fā)人員可以編碼來實現(xiàn)該API,而不是使用私有供應(yīng)商特有的API。因此開發(fā)人員只需使用供應(yīng) 商特有的API來獲得JPA規(guī)范沒有解決但應(yīng)用程序中需要的功能。盡可能地使用JPA API,但是當(dāng)需要供應(yīng)商公開但是規(guī)范中沒有提供的功能時,則使用供應(yīng)商特有的API。
    1 Hibernate
    JPA是需要Provider來實現(xiàn)其功能的,Hibernate就是JPA Provider中很強(qiáng)的一個,目前來說應(yīng)該無人能出其右。從功能上來說,JPA現(xiàn)在就是Hibernate功能的一個子集。Hibernate 從3.2開始,就開始兼容JPA。Hibernate3.2獲得了Sun TCK的JPA(Java Persistence API) 兼容認(rèn)證。
    只要熟悉Hibernate或者其他ORM框架,在使用JPA時會發(fā)現(xiàn)其實非常容易上手。例如 實體對象的狀態(tài),在Hibernate有自由、持久、游離三種,JPA里有new,managed,detached,removed,明眼人一看就知 道,這些狀態(tài)都是一一對應(yīng)的。再如flush方法,都是對應(yīng)的,而其他的再如說Query query = manager.createQuery(sql),它在Hibernate里寫法上是session,而在JPA中變成了manager,所以從 Hibernate到JPA的代價應(yīng)該是非常小的
    同樣,JDO,也開始兼容JPA。在ORM的領(lǐng)域中,看來JPA已經(jīng)是王道,規(guī)范就是規(guī)范。在各大廠商的支持下,JPA的使用開始變得廣泛。
    2 Spring
    Spring + Hibernate 常常被稱為 Java Web 應(yīng)用人氣最旺的框架組合。而在 JCP 通過的 Web Beans JSR ,卻欲將JSF + EJB + JPA 、來自 JBoss Seam(Spring 除外)的一些組件和EJB 3(目前能夠提供有基本攔截和依賴注入功能的簡化 Session Bean 框架)的一個 Web 組合進(jìn)行標(biāo)準(zhǔn)化。如今的 Spring 2.0 為 JPA 提供了完整的 EJB 容器契約,允許 JPA在任何環(huán)境內(nèi)可以在 Spring 管理的服務(wù)層使用(包括 Spring 的所有 AOP 和 DI 增強(qiáng))。同時,關(guān)于下一個Web應(yīng)用組合會是 EJB、Spring + Hibernate 還是 Spring + JPA 的論戰(zhàn),早已充斥于耳。
    在Spring 2.0.1中,正式提供對JPA的支持,這也促成了JPA的發(fā)展,要知道JPA的好處在于可以分離于容器運(yùn)行,變得更加的簡潔。
    3 OpenJPA
    OpenJPA 是 Apache 組織提供的開源項目,它實現(xiàn)了 EJB 3.0 中的 JPA 標(biāo)準(zhǔn),為開發(fā)者提供功能強(qiáng)大、使用簡單的持久化數(shù)據(jù)管理框架。OpenJPA 封裝了和關(guān)系型數(shù)據(jù)庫交互的操作,讓開發(fā)者把注意力集中在編寫業(yè)務(wù)邏輯上。OpenJPA 可以作為獨(dú)立的持久層框架發(fā)揮作用,也可以輕松的與其它 Java EE 應(yīng)用框架或者符合 EJB 3.0 標(biāo)準(zhǔn)的容器集成。
    4 其它
    目前支持的實現(xiàn)包括Toplink、Hibernate Entitymanager等。TopLink以前需要收費(fèi),如今開源了。OpenJPA雖然免費(fèi),但功能、性能、普及性等方面更加需要加大力度。
    對于EJB來說,實體Bean一直是被批評的對象,由于其太復(fù)雜和龐大。JPA的出現(xiàn),很大程度的分離了復(fù)雜性。這讓EJB的推廣也變得容易。
    總而言之,JPA規(guī)范主要關(guān)注的僅是API的行為方面,而由各種實現(xiàn)完成大多數(shù)性能有關(guān)的調(diào)優(yōu)。盡管如此,所有可靠的實現(xiàn)都應(yīng)該擁有某種數(shù)據(jù)緩存,以作為選擇。但愿不久的將來,JPA能成為真正的標(biāo)準(zhǔn)。
    小結(jié)
    EJB 3.0和JPA 毫無疑問將是Java EE 5的主要賣點。在某些領(lǐng)域中,它們給Java社區(qū)帶來了競爭優(yōu)勢,并使Java 在其他領(lǐng)域與競爭對手不分伯仲(因為,不可否認(rèn),目前某些領(lǐng)域尚不存在基于標(biāo)準(zhǔn)的方法)。
    過去數(shù)年來,Spring Framework一直是EJB在企業(yè)領(lǐng)域的主要競爭對手。EJB3.0規(guī)范解決了很多促進(jìn)Spring興起的問題。隨著它的出現(xiàn),EJB3.0毫無疑問比Spring提供了更好的開發(fā)體驗——最引人注目的優(yōu)勢是它不需要配置文件。
    JPA提供一種標(biāo)準(zhǔn)的OR映射解決方案,該解決方案完全集成到EJB3。0兼容的容器中。JPA的前輩將會繼續(xù)穩(wěn)定發(fā)展,但是業(yè)務(wù)應(yīng)用程序中的 raw 使用將可能會減少。實現(xiàn) JPA 兼容的實體管理器似乎很可能是此類技術(shù)的發(fā)展方向。
    Java EE系列規(guī)范的較大問題與JPA沒有任何關(guān)系。Java EE 系列規(guī)范的問題涉及到 Web和EJB容器之間的集成。Spring在此領(lǐng)域仍然具有主要競爭優(yōu)勢。JBoss的Seam項目嘗試使用自定義的方法來解決這一問題。Caucho Resin應(yīng)用服務(wù)器試圖擴(kuò)展容器邊界并支持在Web容器中使用@EJB注釋。我們希望Java EE 5.1將解決層集成的問題,為我們提供一個全面而標(biāo)準(zhǔn)的依賴性注入方法。
    在不久的將來,Sun可能會將JPA作為一個單獨(dú)的JSR對待,同時JPA還可能作為Java SE的一部分。不過這些都不太重要,重要的是,我們現(xiàn)在已經(jīng)可以在脫離容器的情況下、在Java SE應(yīng)用中使用JPA了。
    JPA已經(jīng)作為一項對象持久化的標(biāo)準(zhǔn),不但可以獲得Java EE應(yīng)用服務(wù)器的支持,還可以直接在Java SE中使用。開發(fā)者將無需在現(xiàn)有多種ORM框架中艱難地選擇,按照Sun的預(yù)想,現(xiàn)有ORM框架頭頂?shù)墓猸h(huán)將漸漸暗淡,不再具有以往的吸引力。

    posted on 2008-11-14 15:43 常言笑 閱讀(10041) 評論(5)  編輯  收藏 所屬分類: JAVA/J2EE

    Feedback

    # re: JPA是什么 2009-06-10 21:51 234

    234  回復(fù)  更多評論   

    # re: JPA是什么 2009-08-28 15:33 Nassir

    JPA與Hibernate相比,哪個優(yōu)勢更大啊?  回復(fù)  更多評論   

    # re: JPA是什么 2009-09-03 12:28 jyc

    JPA和hibernate不是平行的,jpa其實是一種規(guī)范。需要Provider,hibernate就是其中之一。  回復(fù)  更多評論   

    # re: JPA是什么 2012-05-18 19:47 12

    http://www.ge2kan.com  回復(fù)  更多評論   

    # re: JPA是什么[未登錄] 2014-08-22 11:14 aaa

    aaaa  回復(fù)  更多評論   


    My Links

    Blog Stats

    • 隨筆 - 142
    • 文章 - 2
    • 評論 - 39
    • Trackbacks - 0

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    搜索

    •  

    積分與排名

    • 積分 - 217554
    • 排名 - 261

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一级黄色视频| 国产色爽免费视频| 亚洲成人激情在线| 国内少妇偷人精品视频免费| 在线亚洲精品自拍| 国产特黄特色的大片观看免费视频| 免费**毛片在线播放直播| 羞羞漫画登录页面免费| 亚洲毛片av日韩av无码| 一个人看的hd免费视频| 亚洲人成影院在线无码按摩店| 你是我的城池营垒免费看| 亚洲精品高清国产一久久| 4hu四虎最新免费地址| 亚洲13又紧又嫩又水多| 在线观看视频免费国语| 男女猛烈xx00免费视频试看| 久久久久亚洲?V成人无码| 99视频在线观看免费| 亚洲人成在线影院| 女人被免费视频网站| 四虎一区二区成人免费影院网址| 中文字幕精品亚洲无线码二区| 无码国产精品一区二区免费16| 91亚洲精品自在在线观看| 日本特黄a级高清免费大片| 久久久WWW免费人成精品| 亚洲视频在线观看网站| 免费无码又爽又刺激毛片| 亚洲一级片免费看| 亚洲国产精品久久久久秋霞影院 | 久久久久久久岛国免费播放| 亚洲黄色网站视频| 国产一级特黄高清免费大片| 波多野结衣免费一区视频 | 中文字幕在线观看免费| 亚洲最大免费视频网| 亚洲阿v天堂在线2017免费| 久久久久国色av免费看| 亚洲AV成人无码网站| 亚洲国产二区三区久久|