Spring ibatis批量儲存心得 2

2021-08-31 15:29:31 字數 1326 閱讀 1864

1、上回的心得中我強調了startbatch()的批處理的作用,但是其中的使用是個錯誤用法,並沒有發揮出startbatch()的實力,對此給與觀眾的誤導我將在此表示到欠,並貼出正確的用法public class localdaoimpl extends sqlmapclientdaosupport implements localdao {

public void insertbunataxbatlst(final paginatedlist list)

{getsqlmapclienttemplate().execute(new sqlmapclientcallback() {

public object doinsqlmapclient(sqlmapexecutor executor)

throws sqlexception {

executor.startbatch();

// do some ibatis operations here

for(int i=0,count=list.size();i這樣才能利用上startbatch()威力。

2、注意ibatis的事物預設情況下是自動提交的,如果發現速度上有問題可以留意一下,ibatis只有在顯示的宣告事物管理的情況下才自動將事物管理改為不自動方式。

3、還是startbatch(),據我測試分析這個鬼東西只有在executebatch(),才把所有的語句提交到資料庫,在提交之前快取中保留了大量的sql語句和資料物件,很有可能out of memony,對此要留意,可以在大量資料要做插入時,分批用batch,如:有40000條資料可將其分為4個batch塊,讓後將這4個batch用乙個事物提交以保證資料完整性。

注:最近在做資料抽取專案,願與大家溝通心得

到乙個這東西都寫到3了,針對上回說到30000條資料的批量插入工作。30000條資料的批量插入在乙個事務裡處理固然是快,但是這只是測試環境,30000條資料在資料庫的快取裡必然對數資料庫的快取和鎖數量都是乙個大的挑戰,固在新的程式中我們使用了分批事務提交的方式,這樣為了保持資料的正確行就只能人為控制資料庫中已被插入的資料是否delete掉。另外,使用batch塊提交會引發乙個問題就是,如果batch塊中發生了異常,我們得不到異常資料的行號即任何資訊,所以只能是魚和熊掌不可兼得(我已關注過insert方法中返回pk的方法了,但好像在batch中他反回不了出錯的行號,也許是我沒有找到方法,如有人有好方法請共享一下,在這裡表示感謝),大家酌情考慮吧,只能到到自己需要的平衡點了。

建議:如果對資料的準確性毋庸置疑的話就是用batch處理。如果不能確定準確性的話,如果對那條資料出錯無所謂的話就也可以用batch,但是非要返回出錯行號的話就不要用batch了,直接在外面套用乙個事務,然後try catch一下,處理一下行號。

Spring Ibatis批量效能

1.按需取資料,減少網路開銷。a 表 有 100 多個字段,儲存在資料庫 a 上 id property1 property2 property120 b 表 只有 10 個字段,儲存在資料庫 b 上 id property1 property2 property10 要從 a 表中查詢一些資料在插...

spring ibatis 批量處理資料

本人在最近的專案中發現這樣的乙個問題。在spring ibatis的配置下,存在多種進行資料操作的方法。各種方法在效率上以及是否存在潛在bug上,也各不相同。以下述 為例 public void insert siterank param public void insertall listsite...

spring ibatis 批量提交資料

在系統中,提取資料迴圈計算後,每次需要有大概3000條左右的資料需要提交到資料庫。以前在迴圈中單條插入,開始只有200條左右的資料,看不出效能上的問題,現在資料量增長了很多,所以需要對提交功能做一下優化。spring整合了ibatis的批量提交的功能,我們只要呼叫api就可以了 首先在你的dao中需...