日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对Hibernate使用之愚见

發(fā)布時間:2023/12/10 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对Hibernate使用之愚见 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
對Hibernate使用之愚見
? 國人跟風(fēng)之潮,自古有之,至今亦然。

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

目前隨處可見的Hibernate優(yōu)化方式無外以下幾條

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

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

?? 2、one-to-many的關(guān)系里將lazy設(shè)成true,開啟延遲加載

?? 3、HQL優(yōu)化,對于語句本身進(jìn)行優(yōu)化

?? 4、映射文件優(yōu)化(ID生成策略,二級緩存,延遲加載,關(guān)聯(lián)優(yōu)化)

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

?? 6、Session管理優(yōu)化,可考慮使用spring的HibernateTemplate

?? 7、一級緩存的管理優(yōu)化

?? 8、針對二級緩存,使用相關(guān)策略

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

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

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

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


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

2.? 二者都是比較優(yōu)秀的開源產(chǎn)品(誰否認(rèn)?誰敢否認(rèn)?)

3.? 當(dāng)系統(tǒng)屬于二次開發(fā),無法對數(shù)據(jù)庫結(jié)構(gòu)做到控制和修改,那iBATIS的靈活性將比Hibernate更適合(我就是經(jīng)常做遺留項目……)

4.? 系統(tǒng)數(shù)據(jù)處理量巨大,性能要求極為苛刻,這往往意味著我們必須通過經(jīng)過高度優(yōu)化的SQL語句(或存儲過程)才能達(dá)到系統(tǒng)性能設(shè)計指標(biāo)。在這種情況下iBATIS會有更好的可控性和表現(xiàn)。

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

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

6.? iBATIS以數(shù)據(jù)庫字段一一對應(yīng)映射得到的PO和Hibernte這種對象化映射得到的PO是截然不同的,本質(zhì)區(qū)別在于這種PO是扁平化的,不像Hibernate映射的PO是可以表達(dá)立體的對象繼承,聚合等等關(guān)系的,這將會直接影響到你的整個軟件系統(tǒng)的設(shè)計思路。

7.? Hibernate現(xiàn)在已經(jīng)是主流O/R Mapping框架,從文檔的豐富性,產(chǎn)品的完善性,版本的開發(fā)速度都要強(qiáng)于iBATIS(從目前大多數(shù)公司的跟風(fēng)態(tài)度便可以看出)

8.? 最關(guān)鍵的一句話是iBATIS的作者說的,我認(rèn)為很誠懇:
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,而且是在爭取成為其擁護(hù)者(最近在開始扣Hibernate代碼,其實從05年就開始,但是沒堅持超過3天……),

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

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

轉(zhuǎn)載于:https://www.cnblogs.com/cping1982/archive/2007/08/19/2258119.html

總結(jié)

以上是生活随笔為你收集整理的对Hibernate使用之愚见的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。