溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Hibernate性能的示例分析

發(fā)布時(shí)間:2021-12-01 10:29:50 來源:億速云 閱讀:164 作者:小新 欄目:編程語言

這篇文章將為大家詳細(xì)講解有關(guān)Hibernate性能的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

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、Hibernate性能:我堅(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):

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

◆Flush會(huì)影響性能,頻繁刷新影響性能,盡量減少不必要的刷新。

◆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è)置正確,可提升性能。

◆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)存。

◆另外還有集合的性能(set、list、map、array),都應(yīng)正確設(shè)置。

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

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

關(guān)于“Hibernate性能的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI