posts - 31,  comments - 31,  trackbacks - 0
          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<count;i++)
                              
          {    
                                  executor.insert(
          "insertBuNaTaxBatLst", list.get(i));
                                  
          if (i % 50 == 0{
                                      System.out.println(
          "----" + i);//沒有意義只為測試
                                  }

                              }

                              executor.executeBatch();
                              
          return null;
                          }

                      }
          );
              }


          }
          這樣才能利用上startBatch()威力。
          2、注意ibatis的事物默認情況下是自動提交的,如果發現速度上有問題可以留意一下,ibatis只有在顯示的聲明事物管理的情況下才自動將事物管理改為不自動方式。
          3、還是startBatch(),據我測試分析這個鬼東西只有在executeBatch(),才把所有的語句提交到數據庫,在提交之前緩存中保留了大量的sql語句和數據對象,很有可能out of memony,對此要留意,可以在大量數據要做插入時,分批用Batch,如:有40000條數據可將其分為4個Batch塊,讓后將這4個Batch用一個事物提交以保證數據完整性。
          注:最近在做數據抽取項目,愿與大家溝通心得
          posted on 2007-05-30 21:46 小平 閱讀(5963) 評論(6)  編輯  收藏


          FeedBack:
          # re: Spring+ibatis批量存儲心得 2
          2008-01-16 17:43 | 巖石
          非常的好,謝謝,受教了  回復  更多評論
            
          # re: Spring+ibatis批量存儲心得 2[未登錄]
          2008-06-04 00:29 | peter
          學習  回復  更多評論
            
          # re: Spring+ibatis批量存儲心得 2
          2008-11-05 10:48 | 菜蟲
          請問一下,對多張表同時進行批量插入也可以用這種方法嗎?
          執行插入多少條時去調用 executor.executeBatch();效率快。  回復  更多評論
            
          # re: Spring+ibatis批量存儲心得 2
          2009-06-05 10:24 | wnick123
          getSqlMapClientTemplate().execute(new SqlMapClientCallback(){
          public Object doInSqlMapClient(SqlMapExecutor sqlExe) throws SQLException
          {

          getSqlMapClient().startBatch();
          for(ChoiceItem ci:item.getChoiceItems()){
          ci.setFormId(item.getFormId());
          ci.setItemId(item.getItemId());
          getSqlMapClientTemplate().insert("choice_item.insert",ci);
          }
          getSqlMapClient().executeBatch();
          return null;
          }
          });
          /*
          getSqlMapClient().startBatch();
          for(ChoiceItem ci:item.getChoiceItems()){
          ci.setFormId(item.getFormId());
          ci.setItemId(item.getItemId());
          getSqlMapClientTemplate().insert("choice_item.insert",ci);
          }
          getSqlMapClient().executeBatch();
          */


          請問這兩種那個效率高?
          為什么要使用回調的方法  回復  更多評論
            
          # re: Spring+ibatis批量存儲心得 2[未登錄]
          2009-09-02 13:58 | 小斌
          mark  回復  更多評論
            
          # re: Spring+ibatis批量存儲心得 2[未登錄]
          2009-10-22 09:49 | allen
          看看源碼你就知道為什么容易溢出了,你寫的方法也不是完全正確的,因為本身源碼就存在bug,所以自己改源碼中預處理ps生成語句算法,再像你這么用就可以,歡迎討論qq279068158  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          framework

          j2me

          java

          linux

          web

          其他

          友情鏈接

          素材

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 太和县| 梧州市| 太保市| 陆良县| 景泰县| 蛟河市| 比如县| 金阳县| 玛纳斯县| 绍兴市| 苍南县| 石河子市| 宜川县| 清镇市| 长宁区| 玉树县| 红安县| 乌海市| 罗江县| 门源| 天台县| 株洲市| 平乡县| 齐齐哈尔市| 台南县| 运城市| 保德县| 吉水县| 瑞金市| 洪江市| 富民县| 大邑县| 梅州市| 那坡县| 都江堰市| 桐庐县| 科技| 涪陵区| 娱乐| 镇平县| 长子县|