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

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

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

    隨筆-199  評論-203  文章-11  trackbacks-0
      Hibernate在解決性能問題方面做得非常好。有了它的緩存機(jī)制,使用第三方緩存和數(shù)據(jù)庫連接池,就較好的解決的性能問題。但這些還不夠,hibernate給了開發(fā)者足夠的自由,讓開發(fā)者自己去控制性能問題。

        學(xué)習(xí)了一段時間的ibatis,我覺得hibernate有著ibatis無法替代的優(yōu)勢。

        1、開發(fā)者都知道,hibernate讓我們以oo的方式操作數(shù)據(jù)庫,這讓我們看到了hibernate的強(qiáng)大之處,體驗到操作數(shù)據(jù)的方便。但Gavin King說,hibernate最耀眼之處是hibernate的緩存機(jī)制,而不是以oo的方式操作數(shù)據(jù)庫。Hibernate的緩存機(jī)制不外乎是一級緩存session,二級緩存sessionFactory,和第三方緩存如ehcache.也就是hibernate的最強(qiáng)大的地方是它的緩存,理解了這個才能真正的理解hibernate.緩存實在太難了,我至今未能真正理解。

        2、可維護(hù)性:ibatis宣揚寫sql語句,它將sql語句放進(jìn)一個單獨的xml文件,這種方式贏得了很多開發(fā)者的喜愛,一句話,方便維護(hù)。但hibernate同樣具有這種功能,而且比ibatis更加強(qiáng)大。Hibernate的命名查詢/命名參數(shù)查詢,就是將hql語句放在一個單獨的xml文件之中,它仍然讓人們以面向?qū)ο蟮姆绞饺ゲ倏v數(shù)據(jù),這得到大量遵循oo方式開發(fā)者的喜愛,而不用在以oo的方式寫著代碼的同時,然后再轉(zhuǎn)變思維,用面向關(guān)系的方式去寫那些sql語句。但hibernate不僅做了這些,它的native sql查詢方式,完全滿足sql語句的偏愛者,它像ibatis一樣,將sql語句放在配置文件之中。

        3、性能:我堅信,hibernate性能問題不是問題。想想那么多大中小項目都在使用hibernate,你還懷疑hibernate的性能嗎?spring整合hibernate之后,在真正性能瓶頸的地方,完全可以使用spring集成的jdbc,或直接寫存儲過程得了。但首先得確認(rèn),這實在是性能瓶頸的地方,我想,不應(yīng)想當(dāng)然的認(rèn)為性能的問題,所謂的性能問題阻撓了很多人。

        我認(rèn)為,性能的好壞無外是發(fā)送sql語句的多少而已。性能好,發(fā)送的sql語句少,性能差,就是發(fā)送大量的sql語句。Hibernate在解決性能問題方面做得非常好。

        有了它的緩存機(jī)制,使用第三方緩存和數(shù)據(jù)庫連接池,就較好的解決的性能問題。

        但這些還不夠,hibernate給了開發(fā)者足夠的自由,讓開發(fā)者自己去控制性能問題。

        我認(rèn)為開發(fā)者可以在以下幾個方面自行調(diào)優(yōu):

        a、在查詢字符串中,應(yīng)該總是使用jdbc的占位符?,或使用使用命名參數(shù):,不要自查詢中使用字符串值來代替非常量值。

        b、Flush會影響性能,頻繁刷新影響性能,盡量減少不必要的刷新。

        c、Cascade策略,在幾對幾的關(guān)系,正確設(shè)置cascade策略,想清楚在操作對象A的同時是否需要級聯(lián)操作對象B,比如在one to many的父子關(guān)系中,刪除了父親one,需級聯(lián)刪除子many,這時的one這端可設(shè)置cascade = “delete”,這樣在刪除one時,會自動刪除子,但對子的操作不會影響父。Cascade還有其他的屬性值,只要設(shè)置正確,可提升性能。

        d、lazy策略,正確設(shè)置延遲加載策略同樣會提升性能,在one to many或many to many中,通??倯?yīng)該延遲加載many的一方的到內(nèi)存。設(shè)置了lazy = “true”,首先發(fā)送sql語句,加載自己到內(nèi)存,到需要時才加載級聯(lián)對象;lazy=“false”,則會同時加載自己和級聯(lián)對象到內(nèi)存。

        e、另外還有集合的性能(set、list、map、array),都應(yīng)正確設(shè)置。

        f、正確使用第三方緩存,在讀操作頻繁寫操作不多的情況,使用第三方緩存可大幅度提升性能,如ehcache的緩存策略有:read-only,read-write和notstrict-read-write.

        f、 隨著hibernate新版本的發(fā)布,和技術(shù)的發(fā)展,我相信hibernate的性能會越來越好,所有性能不是不使用hibernate的原因。

        4、hibernate不僅僅作為持久層的orm框架存在,它除了dao層的持久化操作外,還有很多。

        在注解annotation已經(jīng)走向主流的今天,hibernate 迅速響應(yīng),讓xml部署描述符成為可選的。Hibernate annotation 對大字段的處理只是一個@Lob就搞定了。

        hibernate search對Lucene進(jìn)行了輕量級的封裝,全文檢索變得非常簡單。

        Hibernate validator被認(rèn)為是最合理的驗證方式,將驗證策略直接附在貫穿各層的領(lǐng)域模型domain上,不再需要哪些web框架的xml方式的驗證,代碼中不再出現(xiàn)大量的非空/null的判斷。

        5、jbpm, Jbpm業(yè)務(wù)流程引擎的持久層采用hibenrnate來實現(xiàn),要想使用jbpm,hibernate是必須的。我想,業(yè)務(wù)流程管理無比重要,在soa迅速發(fā)展的今天,如果實施soa項目,業(yè)務(wù)流程管理是必然和必須的。因為soa就是業(yè)務(wù)和it技術(shù)的融合,是業(yè)務(wù)流程管理和it基礎(chǔ)架構(gòu)的融合。在soa中,業(yè)務(wù)管理是第一位的,這需要相應(yīng)的技術(shù)來實現(xiàn)該業(yè)務(wù)流程管理。開源領(lǐng)域的jbpm我想會是首選。所以,為了將來有可能實施soa項目,為了實現(xiàn)soa的業(yè)務(wù)流程管理,應(yīng)該使用hibernate.

        6、大家都知道,hibernate將ejb2時代的實體bean趕進(jìn)了歷史,而ejb3的jpa標(biāo)準(zhǔn)也只不過是hibernate的子集而已。jsr規(guī)范請求的威力是巨大的,沒有各種jsr規(guī)范請求,就不會有各種應(yīng)用程序框架,各種應(yīng)用程序框架只是那些jsr規(guī)范請求的實現(xiàn)者。jpa作為持久層的規(guī)范標(biāo)準(zhǔn),引導(dǎo)持久層orm框架的方向,jpa同樣以面向?qū)ο蟮姆绞讲僮鲾?shù)據(jù)庫,而不是寫sql語句。規(guī)范標(biāo)準(zhǔn)都完全orm,不寫sql了,你還有理由不跟著它嗎?

        7、Spring+hibernate+范型+可變參數(shù),這是一個非常強(qiáng)大的組合,對應(yīng)普通的crud操作,你不再需要重復(fù)寫那些煩人的相似的dao層和manager層的代碼,僅僅需要寫一次,就完成了所有大量的crud操作。Ibatis盡管也支持范型,但始終沒有hibernate支持的好

        8、Jboss,hibernate是jboss的項目,jboss的所有項目的持久層都采用的hibernate,要知道,jsr規(guī)范組的專家們大多數(shù)是來自jboss的,在一定程度上說,jboo引領(lǐng)著java的發(fā)展方向。使用hibernate,跟著jboss,不偏離java的發(fā)展方向。

        9、Gavin King,我最崇拜的偶像,他不僅發(fā)明了強(qiáng)大的hibernate,還搞出了同樣強(qiáng)大且優(yōu)雅的web2.0應(yīng)用程序框架seam.他是ejb3.0專家組成員之一,是jpa規(guī)范請求的領(lǐng)導(dǎo)者,他java領(lǐng)域最有發(fā)言權(quán)、最權(quán)威的領(lǐng)袖人物之一?,F(xiàn)在,他領(lǐng)導(dǎo)web bean的,jsr299的發(fā)展,web bean規(guī)范的制定,全球軟件巨頭如ibm、oracle、bea和apache沒有一個反對,紛紛響應(yīng)。Web bean,想象起來,實在太美好了,完全的松耦合和強(qiáng)類型,所有的應(yīng)用組件生活在一個應(yīng)用組件上下文context中,相互合作。那時將不再有各種各樣的上下文環(huán)境,不再有struts2的ActionContext,不再有spring的ApplicationContext,不再有hibernate的session,不再有持久化上下文,不再有事務(wù)上下文,不再有安全上下文,所有組件生活在一個大家庭中,大家其樂融融,實現(xiàn)天下的大和平。

        10、 osgi,我認(rèn)為現(xiàn)在最值得學(xué)習(xí)的一個技術(shù),有了osgi,實現(xiàn)真正的多模塊開發(fā),改變傳統(tǒng)的開發(fā)方式?,F(xiàn)在,已經(jīng)有了hibernate osgi,spring dynamic modul(osgi),struts 2 同樣實現(xiàn)了對osgi的支持。目前,eclipse是基于osgi開發(fā)的,ibm的websphere v6.1,bea的所有產(chǎn)品都重構(gòu)在osgi上,spring的應(yīng)用服務(wù)器同樣基于osgi,在EclipseCon2007上,osgi成為了主要的話題。Osgi受到如此的待遇,一點不奇怪,因為他具有無比強(qiáng)大的功能,改變傳統(tǒng)的軟件開發(fā)方式。Osgi采用樹設(shè)計模式,將一個項目分成多個模塊(bundle),每個模塊單獨部署,單獨運行,說白了,就是將一個工程分成許多的插件,每個插件單獨開發(fā),重復(fù)使用,實現(xiàn)完全的即插即用。太令人激動了。如果公司的軟件開發(fā)基于osgi,將會有大量的重復(fù)使用的osgi bundles,公司將會積累大量的無形資產(chǎn),軟件開發(fā)將會越來越快。而ibatis現(xiàn)在還沒見到對osgi的支持。

        11、hibernate的社區(qū)非常繁榮,ibatis則相對平靜。

        綜述,hibernate還有很多優(yōu)秀的特點,只是我們不知道。Hibernate與ibatis,就像大家閨秀對小家碧玉,大家閨秀不僅具有小家碧玉的全部,而且知名度更高,更受尊敬,更受人追捧,更有發(fā)展前途。小家碧玉盡管也很有魅力,但始終比上大家閨秀。

        Hibernate所做的不僅僅是dao層的持久化工作,而ibatis恰恰如此。

        選擇hibernate,選擇orm的王者,選擇更全面的工作體驗,選擇更高效的工作方式,選擇更多的利潤;選擇Gavin King,跟著領(lǐng)袖走;選擇jboss,追隨開源的潮流,不偏離java的發(fā)展方向。

        一切都不是借口。一切都在發(fā)展,hibernate會越來越好。

    posted on 2009-06-18 17:21 Werther 閱讀(5770) 評論(15)  編輯  收藏 所屬分類: 21.Hibernate

    評論:
    # re: hibernate的11大優(yōu)勢 2009-06-18 18:36 | 心夢帆影
    想請教一下:
    Hibernate的多對多關(guān)聯(lián),能不能由雙方來維護(hù)這種關(guān)聯(lián)關(guān)系?  回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 2009-06-18 21:33 | Always BaNg.
    Gavin King也算權(quán)威領(lǐng)袖?Hibernate說到底還是一個應(yīng)用框架,發(fā)展的這么好的一個原因是它出來的早,用的人多了,就成為了de facto。它基本沒有啥技術(shù)含量。

      回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 2009-06-18 22:14 | Artkai
    我認(rèn)為,性能的好壞無外是發(fā)送sql語句的多少而已。性能好,發(fā)送的sql語句少,性能差,就是發(fā)送大量的sql語句。

    無語,看到這個后面的就不用看了。。。。  回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 2009-06-19 00:56 | lg_techie
    存在必有道理!  回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 2009-06-19 07:18 | ee
    @Artkai

    純支持
      回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 2009-06-19 07:50 | BeanSoft
    實踐證明, Hibernate 做復(fù)雜查詢和批量處理, 實在是太差勁了! 相信用過的人會有同感. 至于性能, 的確不是只去拿 SQL 多少來比較的.  回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 2009-06-19 08:48 | good
    如果要做復(fù)雜查詢,直接用jdbctemplate,發(fā)送寫好的SQL語句
    做批量處理,到了一定的batch size要清空session  回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 2009-06-19 12:20 | 找個美女做老婆
    呵呵,你很牛啊,我都用了HIBERNATE幾年了,還沒有比了解它,慚愧,慚愧。。。

    Java樂園 技術(shù)交流社區(qū):http://www.javaly.cn
    Java樂園 群號:15651281
    驗證消息 : Java樂園  回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 2009-06-19 12:21 | 找個美女做老婆
    HIBERNATE 處理 和直接用SQL語句比,是要差點,但是HIBERNATE的優(yōu)點也應(yīng)該看到, 如果需要用SQL的時候,HIBERNATE也支持直接用SQL

    Java樂園 技術(shù)交流社區(qū):http://www.javaly.cn
    Java樂園 群號:15651281
    驗證消息 : Java樂園  回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 2009-06-19 23:57 | 事發(fā)當(dāng)時
    @Always BaNg.
    Gavin King也算權(quán)威領(lǐng)袖?Hibernate說到底還是一個應(yīng)用框架,發(fā)展的這么好的一個原因是它出來的早,用的人多了,就成為了de facto。它基本沒有啥技術(shù)含量。
    ==============================================
    哦,那找這么說java也沒啥牛的,相對于c#,有啥技術(shù)含量,還不是因為他出來早?。。?nbsp; 回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 [未登錄] 2009-06-22 09:40 | wzjin
    @Artkai
    -------------------------------------------------------------
    支持。
    lz沒有自己的思想,所以只能崇拜其他人。當(dāng)初使用hibernate主要是因為移植性好,換數(shù)據(jù)庫只用修改配置文件。至于性能方面并不僅僅是sql語句發(fā)送多少的問題。我看到許多學(xué)編程的人認(rèn)為,一步執(zhí)行的一定比兩步執(zhí)行的快,其實你不知道,你看來是一步執(zhí)行,但是封裝的內(nèi)部是多步執(zhí)行。  回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 [未登錄] 2009-06-23 09:06 | liwei
    博主很有自己的主見,相當(dāng)值得肯定。但有些觀點還是有失偏橢。無論怎樣,加油  回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 2009-06-23 10:12 | 找個美女做老婆
    Java樂園交流學(xué)習(xí)社區(qū): http://www.javaly.cn

    QQ群:28840096  回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 2009-06-23 10:17 | Werther
    @找個美女做老婆
    朋友,煩請不要多次發(fā)此類信息.謝謝合作!
      回復(fù)  更多評論
      
    # re: hibernate的11大優(yōu)勢 [未登錄] 2014-11-21 14:07 | fan
    我認(rèn)為,性能的好壞無外是發(fā)送sql語句的多少而已。性能好,發(fā)送的sql語句少,性能差,就是發(fā)送大量的sql語句。
    群主還很年輕,慢慢學(xué)習(xí)把
      回復(fù)  更多評論
      
    主站蜘蛛池模板: 成人免费视频69| 99久久婷婷免费国产综合精品| 亚洲午夜成人精品电影在线观看| 日本人的色道免费网站| 国产精品偷伦视频免费观看了| 亚洲AV男人的天堂在线观看| 成年女人视频网站免费m| 亚洲免费观看视频| 亚洲欧洲日产国码www| 亚洲香蕉网久久综合影视| 3344永久在线观看视频免费首页| eeuss在线兵区免费观看| 亚洲国产欧洲综合997久久| 亚洲国产电影在线观看| 亚洲福利视频导航| 亚洲伊人色欲综合网| 亚洲美日韩Av中文字幕无码久久久妻妇| 成人毛片18女人毛片免费视频未| 亚洲电影免费在线观看| 免费人成在线观看视频高潮| 中文字幕成人免费高清在线| 老司机午夜免费视频| 亚洲最大成人网色| 亚洲成av人影院| 亚洲福利视频导航| 婷婷亚洲久悠悠色悠在线播放| 亚洲人成在线播放网站| 亚洲中文字幕无码一区二区三区| 91人人区免费区人人| 久草免费手机视频| 久久国产乱子伦精品免费不卡| 色www永久免费| a毛片全部播放免费视频完整18| baoyu116.永久免费视频| 中文成人久久久久影院免费观看| av片在线观看永久免费| 国产视频精品免费视频| 一个人看的www免费视频在线观看 一个人免费视频观看在线www | 亚洲视频在线一区二区| 亚洲人AV永久一区二区三区久久| 亚洲国产精品成人|