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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        d、lazy策略,正確設(shè)置延遲加載策略同樣會(huì)提升性能,在one to many或many to many中,通常總應(yīng)該延遲加載many的一方的到內(nèi)存。設(shè)置了lazy = “true”,首先發(fā)送sql語(yǔ)句,加載自己到內(nèi)存,到需要時(shí)才加載級(jí)聯(lián)對(duì)象;lazy=“false”,則會(huì)同時(shí)加載自己和級(jí)聯(lián)對(duì)象到內(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的性能會(huì)越來(lái)越好,所有性能不是不使用hibernate的原因。

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

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

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

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

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

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

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

        8、Jboss,hibernate是jboss的項(xiàng)目,jboss的所有項(xiàng)目的持久層都采用的hibernate,要知道,jsr規(guī)范組的專家們大多數(shù)是來(lái)自jboss的,在一定程度上說(shuō),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ī)范請(qǐng)求的領(lǐng)導(dǎo)者,他java領(lǐng)域最有發(fā)言權(quán)、最權(quán)威的領(lǐng)袖人物之一。現(xiàn)在,他領(lǐng)導(dǎo)web bean的,jsr299的發(fā)展,web bean規(guī)范的制定,全球軟件巨頭如ibm、oracle、bea和apache沒(méi)有一個(gè)反對(duì),紛紛響應(yīng)。Web bean,想象起來(lái),實(shí)在太美好了,完全的松耦合和強(qiáng)類型,所有的應(yīng)用組件生活在一個(gè)應(yīng)用組件上下文context中,相互合作。那時(shí)將不再有各種各樣的上下文環(huán)境,不再有struts2的ActionContext,不再有spring的ApplicationContext,不再有hibernate的session,不再有持久化上下文,不再有事務(wù)上下文,不再有安全上下文,所有組件生活在一個(gè)大家庭中,大家其樂(lè)融融,實(shí)現(xiàn)天下的大和平。

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

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

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

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

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

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

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

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

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

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

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

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

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

    QQ群:28840096  回復(fù)  更多評(píng)論
      
    # re: hibernate的11大優(yōu)勢(shì) 2009-06-23 10:17 | Werther
    @找個(gè)美女做老婆
    朋友,煩請(qǐng)不要多次發(fā)此類信息.謝謝合作!
      回復(fù)  更多評(píng)論
      
    # re: hibernate的11大優(yōu)勢(shì) [未登錄](méi) 2014-11-21 14:07 | fan
    我認(rèn)為,性能的好壞無(wú)外是發(fā)送sql語(yǔ)句的多少而已。性能好,發(fā)送的sql語(yǔ)句少,性能差,就是發(fā)送大量的sql語(yǔ)句。
    群主還很年輕,慢慢學(xué)習(xí)把
      回復(fù)  更多評(píng)論
      
    主站蜘蛛池模板: 久久久久久久免费视频| 亚洲综合免费视频| 国产一级高清视频免费看| 成人亚洲国产va天堂| 亚洲免费综合色在线视频| 伊人久久五月丁香综合中文亚洲| 91精品国产免费久久久久久青草| 亚洲精品91在线| 久久久久国色AV免费观看性色| 国产v亚洲v天堂a无| 天天拍拍天天爽免费视频| 亚洲色成人WWW永久在线观看| 日本免费无遮挡吸乳视频电影| 亚洲av无码专区在线观看下载| 免费亚洲视频在线观看| 一级毛片a女人刺激视频免费| 丁香五月亚洲综合深深爱| 中国极品美軳免费观看| 亚洲av无码潮喷在线观看| 99久久国产免费-99久久国产免费| 久久久久亚洲AV无码网站| 91在线视频免费看| 国产精品亚洲专区一区| 亚洲中文字幕无码不卡电影| 毛片免费在线观看| 亚洲三级高清免费| 国产免费小视频在线观看| 香蕉免费在线视频| 亚洲春黄在线观看| 好吊妞视频免费视频| 麻豆69堂免费视频| 久久精品7亚洲午夜a| 野花高清在线观看免费3中文| 亚洲无码一区二区三区| 国产亚洲色婷婷久久99精品91| 99精品视频在线视频免费观看 | 国产无遮挡又黄又爽免费网站 | 亚洲永久中文字幕在线| 国产又黄又爽又刺激的免费网址 | 日本亚洲精品色婷婷在线影院| 免费在线观看a级毛片|