如何使用hibernate

這篇文章主要介紹了如何使用hibernate,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì),集網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文營銷等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計(jì),讓網(wǎng)站在運(yùn)行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計(jì)制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。

Hibernate在解決性能問題方面做得非常好。有了它的緩存機(jī)制,使用第三方緩存和數(shù)據(jù)庫連接池,就較好的解決的性能問題。但這些還不夠,hibernate給了開發(fā)者足夠的自由,讓開發(fā)者自己去控制性能問題。

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

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

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

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

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

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

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

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

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

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語句,加載自己到內(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ì)越來越好,所有性能不是不使用hibernate的原因。

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

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

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

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

5、jbpm, Jbpm業(yè)務(wù)流程引擎的持久層采用hibenrnate來實(shí)現(xiàn),要想使用jbpm,hibernate是必須的。我想,業(yè)務(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ù)來實(shí)現(xiàn)該業(yè)務(wù)流程管理。開源領(lǐng)域的jbpm我想會(huì)是***。所以,為了將來有可能實(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)也只不過是hibernate的子集而已。jsr規(guī)范請(qǐng)求的威力是巨大的,沒有各種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ù)庫,而不是寫sql語句。規(guī)范標(biāo)準(zhǔn)都完全orm,不寫sql了,你還有理由不跟著它嗎?

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

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

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

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

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

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

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

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

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何使用hibernate”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

標(biāo)題名稱:如何使用hibernate
轉(zhuǎn)載來源:http://muchs.cn/article4/ijdiie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站制作、搜索引擎優(yōu)化、App開發(fā)、網(wǎng)站策劃、虛擬主機(jī)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司