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

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

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

    posts - 14,  comments - 37,  trackbacks - 0

    POJO = pure old java object or plain ordinary java object or what ever.

    PO = persisent object 持久對(duì)象

    就是說(shuō)在一些Object/Relation Mapping工具中,能夠做到維護(hù)數(shù)據(jù)庫(kù)表記錄的persisent object完全是一個(gè)符合Java Bean規(guī)范的純Java對(duì)象,沒(méi)有增加別的屬性和方法。全都是這樣子的:

     1public class User {    
     2  private long id;    
     3  private String name;   
     4  public void setId(long id) {   
     5 this.id = id;   
     6}
         
     7public void setName(String name) {   
     8this.name=name;   
     9}
        
    10 public long getId() {   
    11 return id;   
    12}
         
    13public String getName() {    
    14return name;   
    15}
       
    16}
         
    17

    ---------------------------------------------------------------------------
    首先要區(qū)別持久對(duì)象和POJO。

    持久對(duì)象實(shí)際上必須對(duì)應(yīng)數(shù)據(jù)庫(kù)中的entity,所以和POJO有所區(qū)別。比如說(shuō)POJO是由new創(chuàng)建,由GC回收。但是持久對(duì)象是insert 數(shù)據(jù)庫(kù)創(chuàng)建,由數(shù)據(jù)庫(kù)delete刪除的。基本上持久對(duì)象生命周期和數(shù)據(jù)庫(kù)密切相關(guān)。另外持久對(duì)象往往只能存在一個(gè)數(shù)據(jù)庫(kù)Connection之中, Connnection關(guān)閉以后,持久對(duì)象就不存在了,而POJO只要不被GC回收,總是存在的。

    由于存在諸多差別,因此持久對(duì)象PO(Persistent Object)在代碼上肯定和POJO不同,起碼PO相對(duì)于POJO會(huì)增加一些用來(lái)管理數(shù)據(jù)庫(kù)entity狀態(tài)的屬性和方法。而ORM追求的目標(biāo)就是要 PO在使用上盡量和POJO一致,對(duì)于程序員來(lái)說(shuō),他們可以把PO當(dāng)做POJO來(lái)用,而感覺(jué)不到PO的存在。

    JDO的實(shí)現(xiàn)方法是這樣的:
    1、編寫(xiě)POJO
    2、編譯POJO
    3、使用JDO的一個(gè)專(zhuān)門(mén)工具,叫做Enhancer,一般是一個(gè)命令行程序,手工運(yùn)行,或者在ant腳本里面運(yùn)行,對(duì)POJO的class文件處理一下,把POJO替換成同名的PO。
    4、在運(yùn)行期運(yùn)行的實(shí)際上是PO,而不是POJO。

    該方法有點(diǎn)類(lèi)似于JSP,JSP也是在編譯期被轉(zhuǎn)換成Servlet來(lái)運(yùn)行的,在運(yùn)行期實(shí)際上運(yùn)行的是Servlet,而不是JSP。

    Hibernate的實(shí)現(xiàn)方法比較先進(jìn):
    1、編寫(xiě)POJO
    2、編譯POJO
    3、直接運(yùn)行,在運(yùn)行期,由Hibernate的CGLIB動(dòng)態(tài)把POJO轉(zhuǎn)換為PO。

    由此可以看出Hibernate是在運(yùn)行期把POJO的字節(jié)碼轉(zhuǎn)換為PO的,而JDO是在編譯期轉(zhuǎn)換的。一般認(rèn)為JDO的方式效率會(huì)稍高,畢竟是編 譯期轉(zhuǎn)換嘛。但是Hibernate的作者Gavin King說(shuō)CGLIB的效率非常之高,運(yùn)行期的PO的字節(jié)碼生成速度非常之快,效率損失幾乎可以忽略不計(jì)。

    實(shí)際上運(yùn)行期生成PO的好處非常大,這樣對(duì)于程序員來(lái)說(shuō),是無(wú)法接觸到PO的,PO對(duì)他們來(lái)說(shuō)完全透明。可以更加自由的以POJO的概念操縱PO。 另外由于是運(yùn)行期生成PO,所以可以支持增量編譯,增量調(diào)試。而JDO則無(wú)法做到這一點(diǎn)。實(shí)際上已經(jīng)有很多人在抱怨JDO的編譯期Enhancer問(wèn)題 了,而據(jù)說(shuō)JBossDO將采用運(yùn)行期生成PO字節(jié)碼,而不采用編譯期生成PO字節(jié)碼。

    另外一個(gè)相關(guān)的問(wèn)題是,不同的JDO產(chǎn)品的Enhancer生成的PO字節(jié)碼可能會(huì)有所不同,可能會(huì)影響在JDO產(chǎn)品之間的可移植性,這一點(diǎn)有點(diǎn)類(lèi)似EJB的可移植性難題。

    -----------------------------------------------------------------------------------
    由這個(gè)問(wèn)題另外引出一個(gè)JDO的缺陷。

    由于JDO的PO狀態(tài)管理方式,所以當(dāng)你在程序里面get/set的時(shí)候,實(shí)際上不是從PO的實(shí)例中取values,而是從JDO StateManager中取出來(lái),所以一旦PM關(guān)閉,PO就不能進(jìn)行存取了。

    在JDO中,也可以通過(guò)一些辦法使得PO可以在PM外面使用,比如說(shuō)定義PO是transient的,但是該P(yáng)O在PM關(guān)閉后就沒(méi)有PO identity了。無(wú)法進(jìn)行跨PM的狀態(tài)管理。

    而Hibernate是從PO實(shí)例中取values的,所以即使Session關(guān)閉,也一樣可以get/set,可以進(jìn)行跨Session的狀態(tài)管理。

    在分多層的應(yīng)用中,由于持久層和業(yè)務(wù)層和web層都是分開(kāi)的,此時(shí)Hibernate的PO完全可以當(dāng)做一個(gè)POJO來(lái)用,也就是當(dāng)做一個(gè)VO,在 各層間自由傳遞,而不用去管Session是開(kāi)還是關(guān)。如果你把這個(gè)POJO序列化的話,甚至可以用在分布式環(huán)境中。(不適合lazy loading的情況)

    但是JDO的PO在PM關(guān)閉后就不能再用了,所以必須在PM關(guān)閉前把PO拷貝一份VO,把VO傳遞給業(yè)務(wù)層和web層使用。在非分布式環(huán)境中,也可 以使用ThreadLocal模式確保PM始終是打開(kāi)狀態(tài),來(lái)避免每次必須進(jìn)行PO到VO的拷貝操作。但是不管怎么說(shuō),這總是權(quán)宜之計(jì),不如 Hibernate的功能強(qiáng)。

    posted on 2007-07-10 09:30 冰封的愛(ài) 閱讀(149) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): J2EE
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(3)

    隨筆檔案

    文章分類(lèi)

    文章檔案

    相冊(cè)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: jlzzjlzz亚洲乱熟在线播放| 国产精品成人免费视频网站京东| 亚洲国产成人精品青青草原| 免费网站看av片| 国产亚洲AV夜间福利香蕉149 | 午夜不卡久久精品无码免费| 亚洲成AV人片在线观看无| 成人爽a毛片免费| 久久精品7亚洲午夜a| 免费无码一区二区三区| 亚洲国产成人精品久久| 美女黄网站人色视频免费国产 | 亚洲成a人无码亚洲成av无码| 在线免费观看毛片网站| 国产精品亚洲片在线花蝴蝶| 丁香亚洲综合五月天婷婷| 国产男女爽爽爽免费视频| 亚洲av无码成人黄网站在线观看| 久久免费福利视频| 亚洲av永久无码精品天堂久久| 成人超污免费网站在线看| 小说专区亚洲春色校园| 国产亚洲精品线观看动态图| 99视频免费观看| 亚洲日本乱码卡2卡3卡新区| 免费在线观看黄网| 华人在线精品免费观看| 亚洲欧洲另类春色校园网站| 国产免费av一区二区三区| 在线看片免费人成视频福利| 33333在线亚洲| 亚洲VA综合VA国产产VA中| 久久国产精品免费视频| 亚洲另类无码专区首页| 亚洲色婷婷一区二区三区| 国产免费不卡v片在线观看| 猫咪免费观看人成网站在线| 亚洲专区先锋影音| 免费无遮挡无码视频网站| 国精产品一区一区三区免费视频| 亚洲人xxx日本人18|