中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決Hibernate批量更新問題

發布時間:2021-12-05 15:24:53 來源:億速云 閱讀:514 作者:小新 欄目:編程語言

這篇文章主要介紹了如何解決Hibernate批量更新問題,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

對于Hibernate批量更新操作,Hibernate是將符合要求的數據查出來,然后再做更新操作。批量刪除也是這樣,先把符合條件的數據查出來,然后再做刪除操作。

這樣有兩個大缺點:
1.占用大量的內存。
2.處理海量數據的時候,執行update/delete語句就是海量了,而且一條update/delete語句只能操作一個對象,這樣頻繁的操作數據庫,性能低下應該是可想而知的了。

Hibernate3 發布后,對Hibernate批量更新/刪除操作引入了bulk update/delete,其原理就是通過一條HQL語句完成批量更新/刪除操作,很類似JDBC的批量更新/刪除操作。在性能上,比Hibernate批量更新/刪除有很大的提升。

Transaction tx=session.beginSession();  String HQL=“delete STUDENT”;  Query query=session.createQuery(HQL);  int size=query.executeUpdate();  tx.commit();  ……

控制臺輸出了也就一條刪除語句Hibernate:delete from T_STUDENT,語句執行少了,性能上也與使用JDBC相差無幾,是一個提升性能很好的方法。當然為了有更好的性能,筆者建議批量更新與刪除操作還是使用JDBC,方法以及基本的知識點與上面的批量插入方法2基本相同,這里就不在冗述。

筆者這里再提供一個方法,就是從數據庫端來考慮提升性能,在Hibernate程序端調用存儲過程。存儲過程在數據庫端運行,速度更快。以批量更新為例,給出參考代碼。

首先在數據庫端建立名為batchUpdateStudent存儲過程:

Transaction tx=session.beginSession();  Connection conn=session.connection();  String pd=“……{call batchUpdateStudent(?)}”;  CallableStatement cstmt=conn.PrepareCall(pd);  cstmt.setInt(1,20);   //把年齡這個參數設為20  tx.commit();

觀察上面的代碼,也是繞過Hibernate API,使用 JDBC API來調用存儲過程,使用的還是Hibernate的事務邊界。存儲過程無疑是提高批量處理性能的一個好方法,直接運行與數據庫端,某種程度上講把批處理的壓力轉接給了數據庫。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何解決Hibernate批量更新問題”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

二连浩特市| 东阿县| 黄浦区| 利辛县| 滁州市| 灵丘县| 陇西县| 六盘水市| 古蔺县| 宁城县| 酒泉市| 金山区| 盈江县| 鄂伦春自治旗| 隆昌县| 怀柔区| 饶平县| 新竹县| 克什克腾旗| 茶陵县| 万山特区| 琼结县| 同仁县| 西乡县| 乐至县| 胶州市| 宁德市| 沁源县| 当雄县| 紫金县| 林甸县| 凉城县| 简阳市| 黎城县| 广水市| 铁力市| 和平县| 沭阳县| 娄底市| 宁夏| 古交市|