談笑有鴻儒,往來無白丁

          在恰當的時間、地點以恰當的方式表達給恰當的人...  閱讀的時候請注意分類,佛曰我日里面是談笑文章,其他是各個分類的文章,積極的熱情投入到寫博的隊伍中來,支持blogjava做大做強!向dudu站長致敬>> > 我的微博敬請收聽
           

          學習了一段時間的ibatis,我覺得hibernate有著ibatis無法替代的優勢。

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

          2、  可維護性:ibatis宣揚寫sql語句,它將sql語句放進一個單獨的xml文件,這種方式贏得了很多開發者的喜愛,一句話,方便維護。但hibernate同樣具有這種功能,而且比ibatis更加強大。Hibernate的命名查詢/命名參數查詢,就是將hql語句放在一個單獨的xml文件之中,它仍然讓人們以面向對象的方式去操縱數據,這得到大量遵循oo方式開發者的喜愛,而不用在以oo的方式寫著代碼的同時,然后再轉變思維,用面向關系的方式去寫那些sql語句。但hibernate不僅做了這些,它的native sql查詢方式,完全滿足sql語句的偏愛者,它像ibatis一樣,將sql語句放在配置文件之中。

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

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

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

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

          我認為開發者可以在以下幾個方面自行調優:

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

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

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

          d、  lazy策略,正確設置延遲加載策略同樣會提升性能,在one to manymany to many中,通常總應該延遲加載many的一方的到內存。設置了lazy = “true”,首先發送sql語句,加載自己到內存,到需要時才加載級聯對象;lazy=”false”,則會同時加載自己和級聯對象到內存。

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

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

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

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

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

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

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

          5、  jbpm Jbpm業務流程引擎的持久層采用hibenrnate來實現,要想使用jbpmhibernate是必須的。我想,業務流程管理無比重要,在soa迅速發展的今天,如果實施soa項目,業務流程管理是必然和必須的。因為soa就是業務和it技術的融合,是業務流程管理和it基礎架構的融合。在soa中,業務管理是第一位的,這需要相應的技術來實現該業務流程管理。開源領域的jbpm我想會是首選。所以,為了將來有可能實施soa項目,為了實現soa的業務流程管理,應該使用hibernate

          6、  大家都知道,hibernateejb2時代的實體bean趕進了歷史,而ejb3jpa標準也只不過是hibernate的子集而已。jsr規范請求的威力是巨大的,沒有各種jsr規范請求,就不會有各種應用程序框架,各種應用程序框架只是那些jsr規范請求的實現者。jpa作為持久層的規范標準,引導持久層orm框架的方向,jpa同樣以面向對象的方式操作數據庫,而不是寫sql語句。規范標準都完全orm,不寫sql了,你還有理由不跟著它嗎?

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

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

          9、  Gavin King,我最崇拜的偶像,他不僅發明了強大的hibernate,還搞出了同樣強大且優雅的web2.0應用程序框架seam。他是ejb3.0專家組成員之一,是jpa規范請求的領導者,他java領域最有發言權、最權威的領袖人物之一。現在,他領導web bean的,jsr299的發展,web bean規范的制定,全球軟件巨頭如ibmoraclebeaapache沒有一個反對,紛紛響應。Web bean,想象起來,實在太美好了,完全的松耦合和強類型,所有的應用組件生活在一個應用組件上下文context中,相互合作。那時將不再有各種各樣的上下文環境,不再有struts2ActionContext,不再有springApplicationContext,不再有hibernatesession,不再有持久化上下文,不再有事務上下文,不再有安全上下文,所有組件生活在一個大家庭中,大家其樂融融,實現天下的大和平。

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

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

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

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

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

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

           

           

                                   

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

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

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

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

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

          所以真正在一個大項目中,集群和分布式事物是不能不提的。  回復  更多評論
            
          # re: 使用hibernate的11大優勢[未登錄]
          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.  回復  更多評論
            
          # re: 使用hibernate的11大優勢[未登錄]
          2008-05-24 10:56 | beansoft
          Bug fix:
          commerial -> commercial
          everone -> each  回復  更多評論
            
          # re: 使用hibernate的11大優勢[未登錄]
          2008-05-24 11:00 | beansoft
          推薦一篇文章,讓你看懂Hibernate的性能問題:
          http://www.javaeye.com/topic/261

          如果沒有提供對應數據庫的方言的話,Hibernate的分頁是先 select * from table, 然后用游標和while循環一條條過去的,這時候還說什么性能有優勢啊。

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

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


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

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

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


          網站導航:
           
          主站蜘蛛池模板: 上栗县| 桐柏县| 长沙市| 定州市| 石阡县| 东兴市| 湘西| 都安| 侯马市| 兴海县| 华阴市| 盘锦市| 滁州市| 钟祥市| 三明市| 九江市| 页游| 韩城市| 五家渠市| 龙山县| 赤壁市| 龙井市| 绥中县| 贡嘎县| 惠东县| 郁南县| 清苑县| 永福县| 五峰| 临洮县| 镇赉县| 东兰县| 安康市| 新昌县| 佛冈县| 灌阳县| 镇康县| 波密县| 娄烦县| 渝中区| 延长县|