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

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

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

    談笑有鴻儒,往來無白丁

    在恰當(dāng)?shù)臅r間、地點以恰當(dāng)?shù)姆绞奖磉_給恰當(dāng)?shù)娜?..  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊伍中來,支持blogjava做大做強!向dudu站長致敬>> > 我的微博敬請收聽
     

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

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

    2、  可維護性:ibatis宣揚寫sql語句,它將sql語句放進一個單獨的xml文件,這種方式贏得了很多開發(fā)者的喜愛,一句話,方便維護。但hibernate同樣具有這種功能,而且比ibatis更加強大。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,或直接寫存儲過程得了。但首先得確認,這實在是性能瓶頸的地方,我想,不應(yīng)想當(dāng)然的認為性能的問題,所謂的性能問題阻撓了很多人。

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

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

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

    我認為開發(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 manymany to many中,通常總應(yīng)該延遲加載many的一方的到內(nèi)存。設(shè)置了lazy = “true”,首先發(fā)送sql語句,加載自己到內(nèi)存,到需要時才加載級聯(lián)對象;lazy=”false”,則會同時加載自己和級聯(lián)對象到內(nèi)存。

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

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

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

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

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

    hibernate searchLucene進行了輕量級的封裝,全文檢索變得非常簡單。

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

    5、  jbpm Jbpm業(yè)務(wù)流程引擎的持久層采用hibenrnate來實現(xiàn),要想使用jbpmhibernate是必須的。我想,業(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、  大家都知道,hibernateejb2時代的實體bean趕進了歷史,而ejb3jpa標(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ù),這是一個非常強大的組合,對應(yīng)普通的crud操作,你不再需要重復(fù)寫那些煩人的相似的dao層和manager層的代碼,僅僅需要寫一次,就完成了所有大量的crud操作。Ibatis盡管也支持范型,但始終沒有hibernate支持的好

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

    9、  Gavin King,我最崇拜的偶像,他不僅發(fā)明了強大的hibernate,還搞出了同樣強大且優(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)袖人物之一。現(xiàn)在,他領(lǐng)導(dǎo)web bean的,jsr299的發(fā)展,web bean規(guī)范的制定,全球軟件巨頭如ibmoraclebeaapache沒有一個反對,紛紛響應(yīng)。Web bean,想象起來,實在太美好了,完全的松耦合和強類型,所有的應(yīng)用組件生活在一個應(yīng)用組件上下文context中,相互合作。那時將不再有各種各樣的上下文環(huán)境,不再有struts2ActionContext,不再有springApplicationContext,不再有hibernatesession,不再有持久化上下文,不再有事務(wù)上下文,不再有安全上下文,所有組件生活在一個大家庭中,大家其樂融融,實現(xiàn)天下的大和平。

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

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

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

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

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

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

     

     

                             

    posted on 2008-05-24 09:42 壞男孩 閱讀(7497) 評論(25)  編輯  收藏

    FeedBack:
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-24 09:59 | haix
    我堅信,hibernate性能問題不是問題。想想那么多大中小項目都在使用hibernate,你還懷疑hibernate的性能嗎?
    性能不能這樣評論吧!

    http://www.handandaily.com  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-24 10:01 | Celin
    不錯有道理。我覺得沒有技術(shù)積累的公司完全可以投靠到JBoss的旗下。在JBoss下,有許多具有一定業(yè)務(wù)功能的模塊,可以提供給我們借鑒。  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-24 10:22 | jasin2008
    個人還是更喜歡寫sql而不是hql  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-24 10:25 | buke
    我覺得術(shù)業(yè)有專攻,一個項目只要做好一部分就行了,
    Hibernate包括的東西太多,任何一個想做的大而全的最終都會倒下去。
    我們用Hibernate只是要他的ORM就行了,其他的有太多更優(yōu)秀的可以用。  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-24 10:49 | 山風(fēng)小子
    Hibernate的確很優(yōu)秀,可惜在處理‘大量’數(shù)據(jù),性能不是很好,需要不斷從緩存中evict對象。  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-24 10:50 | javajava
    我用Hibernate有3年了,它能使開發(fā)效率提升很多。80%的需求都能得到輕松應(yīng)對,20%的需求要靠變通和創(chuàng)新!站在巨人的肩膀上還是比較踏實的!  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-24 10:51 | 隔葉黃鶯
    考慮大項目的應(yīng)用服務(wù)器集群環(huán)境的應(yīng)用,Hibernate的緩存能給帶來什么呢?如果沒有了會話親緣性,從另一臺機器的緩存中(內(nèi)存或是磁盤中) 又何異于再從數(shù)據(jù)庫中查詢一下次呢?

    對于及時性操作很強的業(yè)務(wù),在其中一個機器中緩存已更新,另一機器的緩存還是老數(shù)據(jù),Hibernate 如何取數(shù)據(jù)。緩存數(shù)據(jù)的更新是建立在某種數(shù)據(jù)操作的基礎(chǔ)上,如何能通知另一機器同步刷新本地的緩存。

    還有分布式事物,Hibernate 在支持兩個以至多個數(shù)據(jù)庫,如何保證依次對多個數(shù)據(jù)庫的表操作的原子性呢?除非全部用數(shù)據(jù)庫的DB Link, 這樣就能直接由最前端的數(shù)據(jù)庫來完成兩階段的提交。

    所以真正在一個大項目中,集群和分布式事物是不能不提的。  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢[未登錄]
    2008-05-24 10:53 | beansoft
    Well, then, ok. To comparing the ability, might a commerial Java EE Server is better than just a Hibernate or Spring, it can provide all things you might ever thought about or not. It's to say, a framework must have a usability context, without this, the comparing is meaningless. Can u using Hibernate on a mobile device?No. It's said that using a cannon to shot a fly. We are using frameworks to saving time, not to using it to wasting time, so it's the project leader determines which tech would be applyed to the dev progress, not the framework to determines it.

    The bad side of Java is that: too many technical terms and frameworks is developed, but none of it could reach the key of software development: productivity. Is there any could reach the height of MS .NET plus Visual Studio? Spring + Hibernate + Struts/Webwork could not, EJB + JPA + JSF could not. So we are here using some frameworks that everone said itself to be the best one on market, but it's not the truth.

    Personally, I'd not like to say any article like this: using xxx without xxx or 101 things that xxx can do and 1001 things that xxx can't do.  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢[未登錄]
    2008-05-24 10:56 | beansoft
    Bug fix:
    commerial -> commercial
    everone -> each  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢[未登錄]
    2008-05-24 11:00 | beansoft
    推薦一篇文章,讓你看懂Hibernate的性能問題:
    http://www.javaeye.com/topic/261

    如果沒有提供對應(yīng)數(shù)據(jù)庫的方言的話,Hibernate的分頁是先 select * from table, 然后用游標(biāo)和while循環(huán)一條條過去的,這時候還說什么性能有優(yōu)勢啊。

    所以說世事無絕對。  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-24 13:46 | 結(jié)下梁子
    我們現(xiàn)在的項目導(dǎo)出一個報表有可能就有超過十萬的數(shù)據(jù),這個是真實存在的情況,目前已經(jīng)把這些模塊全部改用jdbc的方式  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-24 13:57 | liuya
    我隨做了2年JAVA但從沒用過HIBERNATE,最擅長ORACLE。就我這個對的理解,不管你用什么框架,都離不開數(shù)據(jù)庫,如果你數(shù)據(jù)庫沒設(shè)計好,用任何框架都是白搭,不管是HIBERNATE還是EJB又或是IBATIS,所以框架只是讓我們開發(fā)的時候方便點,但底層還是要搞清楚。  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-24 18:51 | zht
    重要的不是這門技術(shù),是其經(jīng)典的實現(xiàn)思想  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢[未登錄]
    2008-05-24 20:45 | thinkbase.net
    有激情, 不過對 jsr 過于盲目崇拜, 另外, "實在太難了", "我堅信", "第一位的", "巨頭", "jsr規(guī)范請求的威力是巨大", "被認為是最合理的驗證方式", "最崇拜的偶像", "最有發(fā)言權(quán)、最權(quán)威的領(lǐng)袖人物之一", "最值得學(xué)習(xí)的一個技術(shù)", 樓主過于想當(dāng)然也過于盲目崇拜這些巨頭了, 建議不要眼中只有 hibernate 和 ibatis, 它們的黃金時代早已過去了, 甚至包括 Spring.  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-24 23:35 | sunlin
    beansoft 哥哥用e文寫的內(nèi)容真好,我也很同意。Hibernian不是銀彈啊。以我僅有的經(jīng)驗,發(fā)現(xiàn)部分從事java的開發(fā)人員,部分時間做的工作,其實就是Visual Studio點擊幾下就能做到的東西,而本身很堅持一些他口中所謂的OO,擴展性,標(biāo)準(zhǔn)。我只想問,叫你做個增刪查改,你做完沒啊。很想所,有部分東西,在.net點擊幾下,不用10分鐘的,我見過有用java的同事做好幾天的,還出bug的。

    ---
    java不是樣樣都好,但很讓人舍不得放棄啊。  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢[未登錄]
    2008-05-25 18:33 | AlleNny
    @sunlin
    VS的還是不要摻合進來了吧,大家都知道那些象快餐一樣的技術(shù)最后會帶來什么。  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢[未登錄]
    2008-05-26 09:05 | lz
    hibernate適合懶的程序員使用,懶的程序員都是缺乏細心的。  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢[未登錄]
    2008-05-26 09:10 | 邊城浪子
    確實如此,深有體會。
    在這樣的情況下,還是用JDBC的好!  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢[未登錄]
    2008-05-26 09:11 | 邊城浪子
    @結(jié)下梁子
    確實如此,深有體會。
    在這樣的情況下,還是用JDBC的好!  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-26 14:24 | Happy漫步者
    領(lǐng)域建模解決了上述眾多不協(xié)調(diào)問題,特別是ORM痛苦使用問題,關(guān)于ORM/Hibernate使用還是那句老話:如果你不掌握領(lǐng)域建模方法,那么就不要用Hibernate,對于這個層次的你:也許No ORM 更是一個簡單之道: No ORM: The simplest solution


    http://www.theserverside.com/blogs/thread.tss?thread_id=41715

      回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-26 20:44 | hammer
    我看不出有什么優(yōu)勢來,關(guān)系數(shù)據(jù)庫,你非要把它搞成oo的,一條sql就能搞定的,你非要在那里點啊點啊的過濾,要是碰上報表,你還是得在java里親自把結(jié)果算一遍,有意思嘛?  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-27 13:17 | sss
    建議大家多上上TSS,眼界不要太窄了  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-27 16:40 | 444
    RE:建議大家多上上TSS,眼界不要太窄了
    ---樓上的站著說話不腰疼!  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢
    2008-05-27 17:04 | 懶人
    各有各的好  回復(fù)  更多評論
      
    # re: 使用hibernate的11大優(yōu)勢[未登錄]
    2008-07-20 00:18 | 無名
    存在既有理由! 任何技術(shù)都有其優(yōu)劣,關(guān)鍵在其應(yīng)用場合,根據(jù)應(yīng)用需求來判斷什么技術(shù)在這種需求下才是最合適的 ,這些都是一個相對問題,所以不能只站在一方面來評判  回復(fù)  更多評論
      

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久久精品国产亚洲成人满18免费网站| 亚洲午夜精品一区二区麻豆| 亚洲日韩乱码中文无码蜜桃臀 | 精品免费国产一区二区三区| 免费一级做a爰片久久毛片潮喷| 国产亚洲精品无码拍拍拍色欲| 亚洲av无码成人黄网站在线观看| 亚洲韩国在线一卡二卡| 99久久国产亚洲综合精品| 黄色大片免费网站| 国内精品免费视频精选在线观看| 亚洲视频免费播放| 国产精品嫩草影院免费| 亚洲中文字幕日产乱码高清app| 亚洲综合无码一区二区| AV激情亚洲男人的天堂国语| 国精产品一区一区三区免费视频| 又粗又大又黑又长的免费视频| 日本免费一本天堂在线| 日韩va亚洲va欧洲va国产| 亚洲免费二区三区| 久久WWW免费人成—看片| 精品久久久久久久久免费影院| 亚洲AV之男人的天堂| 亚洲黄色在线视频| 爱情岛论坛亚洲品质自拍视频网站 | 亚洲AV无码专区在线播放中文| 久久精品亚洲AV久久久无码| 九九综合VA免费看| 精品无码免费专区毛片| 免费一级毛片在线观看| 精品日韩亚洲AV无码一区二区三区| 亚洲第一成年免费网站| 久9热免费精品视频在线观看| 日韩一级免费视频| 亚洲AV日韩精品久久久久| 亚洲JLZZJLZZ少妇| 日韩精品久久久久久免费| 免费一级毛片在播放视频| 亚洲一区二区免费视频| A国产一区二区免费入口|