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 小平 閱讀(5970) 評論(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年10月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          framework

          j2me

          java

          linux

          web

          其他

          友情鏈接

          素材

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 贵定县| 闽清县| 乐陵市| 昌宁县| 安徽省| 叙永县| 镇江市| 江北区| 宜川县| 松原市| 邳州市| 罗源县| 黄浦区| 仪征市| 吕梁市| 砚山县| 山西省| 南皮县| 都匀市| 会同县| 孝义市| 泸西县| 厦门市| 卓资县| 都匀市| 文水县| 沾益县| 多伦县| 新密市| 裕民县| 博爱县| 甘孜| 土默特右旗| 尼勒克县| 奎屯市| 泰州市| 浦江县| 苏州市| 淳安县| 西峡县| 昌乐县|