對Hibernate使用之愚見

對Hibernate使用之愚見

? 國人跟風之潮,自古有之,至今亦然。

?? 確實,經過配置優化的Hibernate效率與無任何優化的Hibernate效率誠然不可同日而語。但由于項目開發的復雜性,開發周期中一些突發因素的制約,及項目構建者自身能力的約束,在大型項目中,尤其是在表結構復雜的大型項目中,以某之愚見,國內能將Hibernate真正使用妥當者,尚未多有。

目前隨處可見的Hibernate優化方式無外以下幾條

?? 1、修改hibernate.properties,增加以下兩句:

????????? hibernate.jdbc.fetch_size=50 設定JDBC的Statement讀取數據的時候每次從數據庫中取出的記錄條數,目前MySQL似乎還不支持
????????? hibernate.jdbc.batch_size=100 對數據庫進行批量刪除,批量更新和批量插入的時候的批次大小,令多條語句使用batch操作

?? 2、one-to-many的關系里將lazy設成true,開啟延遲加載

?? 3、HQL優化,對于語句本身進行優化

?? 4、映射文件優化(ID生成策略,二級緩存,延遲加載,關聯優化)

?? 5、對大數據量查詢時,慎用list()或者iterator()返回查詢結果

?? 6、Session管理優化,可考慮使用spring的HibernateTemplate

?? 7、一級緩存的管理優化

?? 8、針對二級緩存,使用相關策略

?? 9、事務控制優化
?
? 另外Hibernate本身借助cglib對字節碼有一定程度的優化,但是目前受到Java本身效率限制,感覺上幫助并非很大。

? 當然了,我僅是大體上說說,本身還有很多很多細節方面的問題存在,及其它很多設置可供調整。但是,由于本人之不學,即使這樣,設定出的Hibernate之效率依舊不高,PS:我開篇便已說過,這是由于本人能力低下造成的,與Hibernate無甚相關。

? 但在同樣表結構復雜項目中,使用相對簡單的ibatis,不需什么配置,卻明顯在效率上優于Hibernate(再重申,在下從沒說過Hibernate效率有問題,只是某才疏學淺配置不當而已),

? 我粗略的將兩者作以下對比:


1.? iBATIS非常簡單易學,Hibernate相對較復雜,門檻較高(借助IDE還比較方便)。

2.? 二者都是比較優秀的開源產品(誰否認?誰敢否認?)

3.? 當系統屬于二次開發,無法對數據庫結構做到控制和修改,那iBATIS的靈活性將比Hibernate更適合(我就是經常做遺留項目……)

4.? 系統數據處理量巨大,性能要求極為苛刻,這往往意味著我們必須通過經過高度優化的SQL語句(或存儲過程)才能達到系統性能設計指標。在這種情況下iBATIS會有更好的可控性和表現。

5.? iBATIS需要手寫sql語句,也可以生成一部分,Hibernate則基本上可以自動生成,偶爾會寫一些Hql。同樣的需求,iBATIS的工作量比

Hibernate要大很多。類似的,如果涉及到數據庫字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。(真正配置好的Hibernate當然很方便,問題是什么人負責配置……)

6.? iBATIS以數據庫字段一一對應映射得到的PO和Hibernte這種對象化映射得到的PO是截然不同的,本質區別在于這種PO是扁平化的,不像Hibernate映射的PO是可以表達立體的對象繼承,聚合等等關系的,這將會直接影響到你的整個軟件系統的設計思路。

7.? Hibernate現在已經是主流O/R Mapping框架,從文檔的豐富性,產品的完善性,版本的開發速度都要強于iBATIS(從目前大多數公司的跟風態度便可以看出)

8.? 最關鍵的一句話是iBATIS的作者說的,我認為很誠懇:
If you are starting a new project and you're in full control of your object model and database design, Hibernate is a good choice of O/R tool.
If you are accessing any 3rd party databases (e.g. vendor supplied), or you're working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That's were an SQL Mapper comes in handy

?事實上,我并不反對Hibernate,而且是在爭取成為其擁護者(最近在開始扣Hibernate代碼,其實從05年就開始,但是沒堅持超過3天……),

但是,以某之不才及短見,卻不贊同無論任何項目都使用Hibernate,尤其是無理由的想當然跟風使用。甚至某些人把背下Hibernate中一些API都當成很自豪的事情,更讓我覺得不可理喻。
?
?框架體系這些東西,說到底,是為更有效的完成編程目的而存在的。無論內部斗得多么厲害,對用戶來說也是毫不相關的事情(除非用戶在某些事物影響下自己提出來要用什么框架……), 愚雖不才,還是希望能因時因人因事而定,不要一概而論。

有感而發,不知所云,興起而言,興盡乃至。
?
posted on 2007-08-19 19:56 cping 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/cping1982/archive/2007/08/19/2258119.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277003.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277003.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277003.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

設計模式學習總結1 - 創建型1 - Abstract Factory抽象工廠模式

AbstractFactory抽象工廠模式(創建型) 作用: 這種模式支持創建不同的對象,這些對象功能接近且一般都是在一起創建的。抽象工廠被具體化成不同的工廠來創建類似產品的不同產品。這種模式將類于使用的客戶端分離以便通過工廠來創建。…

QT練習9 Dialog學習

http://files.cnblogs.com/hnrainll/dialog.zip 源代碼下載轉載于:https://www.cnblogs.com/hnrainll/archive/2011/05/30/2063135.html

C#中NULL,,DBNULL,String.Empty,Convert.IsDBNull()的區別

C#中的空值的判斷較麻煩,不象在VB6中那么簡單,這些各種空值的判斷和理解對不熟悉的人來說,可能很麻煩,現就我在使用過程中的一點體會和大家共同分享。 (1)NULL null 關鍵字是表示不引用任何對象的空引用的文字值。null 是引用類型…

關于初始化C++類成員

轉自:http://www.vckbase.com/document/viewdoc/?id584 在使用C編程的過程當中,常常需要對類成員進行初始化,通常的方法有兩種: 第一種方法: CMYClass::CSomeClass() {x0;y1; } 第二種方法: CSomeClass::CSomeClass…

ASP.NET 2.0 中的新增服務、控件與功能概述(四)

原文出自http://blog.sina.com.cn/s/blog_48b6cd65010004fc.html個性化 另一個新增的服務是個性化,它提供了一種現成的解決方案,用于解決存儲站點用戶的個性化設置問題。目前,此類設置通常存儲在Cookie、后端數據庫或這兩者中。無論這些設置存…

C/C++ 交換兩個數,不使用第三個變量, 函數模板來實現

#include <iostream>template<typename T> void exchangeTwoNumber(T &t1, T &t2)&#xff1b;void test();int main() {int a 10, b 20;double q 10.1, w 20.2;char z z, x x;std::cout << "交換前的 a " << a << &qu…

Oracle錯誤集!

個人使用Oracle時出現的錯誤&#xff0c;在這里記下來&#xff0c;加深印象。 1、ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes 今天寫存儲過程時&#xff0c;使用dbms_output.put_line(result:||i||---||documentID);輸出測試結果。當我設置其輸出記錄較多…

[原+轉]CSS hack 小技巧 讓你的CSS 兼容ff ie6.0 ie7.0

在做東西的時候發現在ie6.0中做的東西到ff下面目全非100% css不兼容不問題 查閱了相關資料 個人感覺以下是一個笨的也是比較快的處理兼容問題的方法方法就是針對不同的瀏覽器寫不同的css 以前用!important 但是ie7 和ff 就不好分了個人感覺比較好的方法是 samplepadding:0px; …

準備試用svn

用了VSS2005感覺一般&#xff0c;準備試用svn&#xff01;&#xff01;&#xff01;轉載于:https://www.cnblogs.com/jessenee/archive/2008/03/31/1131027.html

web功底之強,實屬罕見。。

不看不知道&#xff0c;一看汗得死你了。。純用html做的。不多說&#xff0c;看看就知道了&#xff0c;http://www.kanqq.com/qq/smilies/ku.htm 以人格保證&#xff0c;不是病毒網頁。。。 轉載于:https://www.cnblogs.com/lsgoodsun/archive/2007/11/04/949222.html

第三次作業-Scrum

理解&#xff1a; 首先&#xff0c;敏捷并不是一門具體的技術&#xff0c;而是一種理念或者說是一種思想。它可以指導我們更加高效的開發。其次&#xff0c;敏捷開發都具有以下共同的特征&#xff1a; 1.迭代式開發2. 增量交付 3. 開發團隊和用戶反饋推動產品開發 4. …

如何處理錯誤消息Please install the gcc make perl packages

2019獨角獸企業重金招聘Python工程師標準>>> 如何處理這行錯誤消息&#xff1f; Please install the gcc make perl packages from your distribution。 執行命令行&#xff1a;yum install gcc perl make 輸出&#xff1a; Loaded plugins: product-id, search-dis…

iOS開發 CGAffineTransform 讓圖片旋轉, 旋轉后獲得圖片旋轉的角度

1.讓圖片旋轉 UIImageView *imageView [[UIImageView alloc]init]; imageView.frame CGRectMake(50, 50, 200, 200); imageView.image [UIImage imageNamed:"460.jpg"]; CGAffineTransform transform CGAffineTransformMakeRotation(M_PI*0.38); imageView.tr…

致畢業生:那些年我們錯過的“BAT”

本文旨在用最通俗的語言講述最枯燥的基本知識最近看到公眾號中各種推“招聘季金九銀十銅十二”之類的文章&#xff0c;把畢業季找工作需要應對的事情和解決方法都已經寫的很詳細了&#xff0c;還有各種面經考經揮之即來&#xff0c;已經沒必要再去寫這樣的一個文章了&#xff0…

PHP函數收藏---不斷更新中!

替換html標簽 function strip_bad_tags($html) { $s preg_replace ("?[^>]*>*", "", $html); return $s; } 替換指定tag,$text是需要替換的文本,tags 是需要替換標簽的數組 function strip_selected_tags($text, $tags array()) { $args func_ge…

gcc 5.2.0 手動更新(親測)

注意:(不要在gcc-5.2.0 源碼目錄中執行 configure&#xff0c;否則會報錯)安裝操作如下&#xff1a;0、yum 安裝 gcc yum -y install gcc gcc-c libstdc libstdc-devel autoconf makegcc-5.2.0 下載地址&#xff1a;ftp://gcc.gnu.org/pub/gcc/releases/gcc-5.2.0/gcc-5.2.0…

Lie to me不錯

最近Fox的新劇有個Lie to me不錯&#xff0c;如果你膩了了沒完沒了的Lost&#xff0c;覺得Hero開始離譜了&#xff0c;Prison Break只能重看第一季了&#xff0c;懷念Friends的經典又不忍心再看第10遍的話&#xff0c;這個劇是個不錯的選擇。 看了一集了&#xff0c;每個人平均…

NLog 簡單使用

1.安裝NLog 使其集成到VS 里 下載地址&#xff1a; http://nlog-project.org/ 2.NLog.config <?xml version"1.0" encoding"utf-8" ?> <nlog xmlns"http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi"http://www.w3.or…

10.31T2 點雙聯通分量+預處理前綴+二分答案

2.逛公園I (parka) 【問題描述】 琥珀色黃昏像糖在很美的遠方&#xff0c;思念跟影子在傍晚一起被拉長…… 小 B 帶著 GF 去逛公園&#xff0c;公園一共有 n 個景點&#xff0c;標號為 1 . . . n。景點之間有 m 條路徑相連。 小 B 想選擇編號在一段區間 [l, r] 內的…

SQL學習筆記之存儲過程的編寫

今天寫幾個存儲過程&#xff0c;覺得有這個必要記錄下來&#xff0c;方便以后忘了也好有個備份&#xff0c;都很簡單&#xff0c;高手可以不用看的。一、記錄的插入--region [dbo].[InsertArchive]--------------------------------------------------------------------------…