這篇文章主要介紹了如何解決Hibernate批量更新問題,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
創(chuàng)新互聯(lián)公司IDC提供業(yè)務(wù):雅安機(jī)房托管,成都服務(wù)器租用,雅安機(jī)房托管,重慶服務(wù)器租用等四川省內(nèi)主機(jī)托管與主機(jī)租用業(yè)務(wù);數(shù)據(jù)中心含:雙線機(jī)房,BGP機(jī)房,電信機(jī)房,移動(dòng)機(jī)房,聯(lián)通機(jī)房。
對(duì)于Hibernate批量更新操作,Hibernate是將符合要求的數(shù)據(jù)查出來,然后再做更新操作。批量刪除也是這樣,先把符合條件的數(shù)據(jù)查出來,然后再做刪除操作。
這樣有兩個(gè)大缺點(diǎn):
1.占用大量的內(nèi)存。
2.處理海量數(shù)據(jù)的時(shí)候,執(zhí)行update/delete語(yǔ)句就是海量了,而且一條update/delete語(yǔ)句只能操作一個(gè)對(duì)象,這樣頻繁的操作數(shù)據(jù)庫(kù),性能低下應(yīng)該是可想而知的了。
Hibernate3 發(fā)布后,對(duì)Hibernate批量更新/刪除操作引入了bulk update/delete,其原理就是通過一條HQL語(yǔ)句完成批量更新/刪除操作,很類似JDBC的批量更新/刪除操作。在性能上,比Hibernate批量更新/刪除有很大的提升。
Transaction tx=session.beginSession(); String HQL=“delete STUDENT”; Query query=session.createQuery(HQL); int size=query.executeUpdate(); tx.commit(); ……
控制臺(tái)輸出了也就一條刪除語(yǔ)句Hibernate:delete from T_STUDENT,語(yǔ)句執(zhí)行少了,性能上也與使用JDBC相差無幾,是一個(gè)提升性能很好的方法。當(dāng)然為了有更好的性能,筆者建議批量更新與刪除操作還是使用JDBC,方法以及基本的知識(shí)點(diǎn)與上面的批量插入方法2基本相同,這里就不在冗述。
筆者這里再提供一個(gè)方法,就是從數(shù)據(jù)庫(kù)端來考慮提升性能,在Hibernate程序端調(diào)用存儲(chǔ)過程。存儲(chǔ)過程在數(shù)據(jù)庫(kù)端運(yùn)行,速度更快。以批量更新為例,給出參考代碼。
首先在數(shù)據(jù)庫(kù)端建立名為batchUpdateStudent存儲(chǔ)過程:
Transaction tx=session.beginSession(); Connection conn=session.connection(); String pd=“……{call batchUpdateStudent(?)}”; CallableStatement cstmt=conn.PrepareCall(pd); cstmt.setInt(1,20); //把年齡這個(gè)參數(shù)設(shè)為20 tx.commit();
觀察上面的代碼,也是繞過Hibernate API,使用 JDBC API來調(diào)用存儲(chǔ)過程,使用的還是Hibernate的事務(wù)邊界。存儲(chǔ)過程無疑是提高批量處理性能的一個(gè)好方法,直接運(yùn)行與數(shù)據(jù)庫(kù)端,某種程度上講把批處理的壓力轉(zhuǎn)接給了數(shù)據(jù)庫(kù)。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何解決Hibernate批量更新問題”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
網(wǎng)頁(yè)名稱:如何解決Hibernate批量更新問題
標(biāo)題網(wǎng)址:http://aaarwkj.com/article4/igcjie.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、全網(wǎng)營(yíng)銷推廣、自適應(yīng)網(wǎng)站、企業(yè)網(wǎng)站制作、動(dòng)態(tài)網(wǎng)站、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)