新聞中心
學(xué)習(xí)Hibernate時(shí),經(jīng)常會(huì)遇到Hibernate批量更新問(wèn)題,這里將介紹Hibernate批量更新問(wèn)題的解決方法

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、微信小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了涇縣免費(fèi)建站歡迎大家使用!
對(duì)于Hibernate批量更新操作,Hibernate是將符合要求的數(shù)據(jù)查出來(lái),然后再做更新操作。批量刪除也是這樣,先把符合條件的數(shù)據(jù)查出來(lái),然后再做刪除操作。
這樣有兩個(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,其原理就是通過(guò)一條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相差無(wú)幾,是一個(gè)提升性能很好的方法。當(dāng)然為了有更好的性能,筆者建議批量更新與刪除操作還是使用JDBC,方法以及基本的知識(shí)點(diǎn)與上面的批量插入方法2基本相同,這里就不在冗述。
筆者這里再提供一個(gè)方法,就是從數(shù)據(jù)庫(kù)端來(lái)考慮提升性能,在Hibernate程序端調(diào)用存儲(chǔ)過(guò)程。存儲(chǔ)過(guò)程在數(shù)據(jù)庫(kù)端運(yùn)行,速度更快。以批量更新為例,給出參考代碼。
首先在數(shù)據(jù)庫(kù)端建立名為batchUpdateStudent存儲(chǔ)過(guò)程:
- 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();
觀察上面的代碼,也是繞過(guò)Hibernate API,使用 JDBC API來(lái)調(diào)用存儲(chǔ)過(guò)程,使用的還是Hibernate的事務(wù)邊界。存儲(chǔ)過(guò)程無(wú)疑是提高批量處理性能的一個(gè)好方法,直接運(yùn)行與數(shù)據(jù)庫(kù)端,某種程度上講把批處理的壓力轉(zhuǎn)接給了數(shù)據(jù)庫(kù)。
分享題目:剖析Hibernate批量更新
轉(zhuǎn)載源于:http://m.5511xx.com/article/coijhsp.html
其他資訊
- Linux文件復(fù)制覆蓋操作簡(jiǎn)單教程(linux文復(fù)制覆蓋)
- 手環(huán)怎么調(diào)時(shí)間樣式?(運(yùn)動(dòng)手環(huán)怎么設(shè)置,手環(huán)時(shí)間怎么調(diào))
- 國(guó)外實(shí)驗(yàn)數(shù)據(jù)庫(kù):研究新進(jìn)展(國(guó)外實(shí)驗(yàn)數(shù)據(jù)庫(kù))
- “==”和“is”有什么區(qū)別?一個(gè)問(wèn)題就能暴露你的Python水平
- 租用站群服務(wù)器需要注意什么?(租用美國(guó)站群如何選擇論壇站群機(jī)房)


咨詢
建站咨詢
