歡迎您光臨本站 註冊首頁

基於mybatis batch實現批量提交大量數據

←手機掃碼閱讀     retouched @ 2020-06-12 , reply:0

很多人在用 MyBatis 或者 通用 Mapper 時,經常會問有沒有批量插入和批量更新的方法。

實際上許多時候沒必要用去實現特別複雜的批量操作。直接通過 MyBatis 的 BATCH 方式執行增刪改方法即可。

下面是一個批量用法的例子:

在xml文件配置多條參數同時插入:

  select SEQ_CTAS_SHARK_FLT.nextval as recId from dualinsert into CTAS_SHARK_FLT () SELECT SEQ_TEST.NEXTVAL, A.*     FROM (select #{item.awbType,jdbcType=VARCHAR}, #{item.awbPre,jdbcType=VARCHAR},... from dual) A

 

在Java代碼中,oracle中一次執行的sql語句長度是有限制的,如果最後拼出來的sql字元串過長,會導致執行失敗,所以java端還要做一個分段處理,參考下面的處理:

  Listdata = new ArrayList();       for (TSharkFlt f : sharkFlts) {         data.add(getSharkFlt(f));       }         System.out.println(data.size());       long beginTime = System.currentTimeMillis();      System.out.println("開始插入...");       SqlSessionFactory sqlSessionFactory   =ctx.getBean(SqlSessionFactory.class);       SqlSession session = null;      try {         session = sqlSessionFactory.openSession(ExecutorType.BATCH, false);         int a = 2000;//每次提交2000條         int loop = (int) Math.ceil(data.size() / (double) a);            ListtempList = new ArrayList(a);        int start, stop;        for (int i = 0; i < loop; i++) {          tempList.clear();          start = i * a;          stop = Math.min(i * a + a - 1, data.size() - 1);          System.out.println("range:" + start + " - " + stop);          for (int j = start; j <= stop; j++) {             tempList.add(data.get(j));          }           session.insert("ctas.importer.writer.mybatis.mappper.SharkFltMapper.insertBatch2", tempList);          session.commit();          session.clearCache();           System.out.println("已經插入" + (stop + 1) + " 條");         }       } catch (Exception e) {         e.printStackTrace();         session.rollback();      } finally {        if (session != null) {          session.close();        }       }      long endTime = System.currentTimeMillis();      System.out.println("插入完成,耗時 " + (endTime - beginTime) + " 毫秒!");

 

                                                       

   


[retouched ] 基於mybatis batch實現批量提交大量數據已經有232次圍觀

http://coctec.com/docs/program/show-post-238201.html