Mybatis批量事务处理

 /**
       * 批量提交数据
       * @param sqlSessionFactory
       * @param mybatisSQLId SQL语句在Mapper XML文件中的ID
       * @param commitCountEveryTime 每次提交的记录数
       * @param list 要提交的数据列表
       * @param logger 日志记录器
       */
      private <T> void batchCommit(SqlSessionFactory sqlSessionFactory, String mybatisSQLId, int commitCountEveryTime, List<T> list, Logger logger) {
         SqlSession session = null;
         try {
             session = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
             int commitCount = (int) Math.ceil(list.size() / (double) commitCountEveryTime);
             List<T> tempList = new ArrayList<T>(commitCountEveryTime);
             int start, stop;
             Long startTime = System.currentTimeMillis();
             for (int i = 0; i < commitCount; i++) {
                 tempList.clear();
                 start = i * commitCountEveryTime;
                 stop = Math.min(i * commitCountEveryTime + commitCountEveryTime - 1, list.size() - 1);
                 for (int j = start; j <= stop; j++) {
                     tempList.add(list.get(j));
                 }
                 session.insert(mybatisSQLId, tempList);
                 session.commit();
                 session.clearCache();
             }
             Long endTime = System.currentTimeMillis();
             logger.debug("batchCommit耗时:" + (endTime - startTime) + "毫秒");
         } catch (Exception e) {
             logger.error("batchCommit error!", e);
             e.printStackTrace();
             session.rollback();
         } finally {
             if (session != null) {
                 session.close();
             }
         }
     }


SqlSessionFactory获取方式:
SqlSessionFactory sqlSessionFactory = ctx.getBean(SqlSessionFactory.class);
SqlSession session = null;
session = sqlSessionFactory.openSession(ExecutorType.BATCH, false);

转载于:https://www.cnblogs.com/jagng951014/p/9462576.html

Mybatis-plus提供了方便的批量处理功能,可以通过它来实现批量新增和批量修改操作。在使用Mybatis-plus进行批量处理时,官方提供了针对id的批量修改和批量新增方法。但是有时候我们需要根据其他字段来进行操作,这时候就需要我们自己进行修改了。 对于批量修改操作,可以使用Mybatis-plus提供的方法进行操作,也可以根据项目的实际需求进行扩展。可以将需要修改的数据封装成一个列表,然后通过遍历列表的方式进行批量修改。 对于批量新增操作也是类似的,可以使用Mybatis-plus提供的方法进行操作,也可以根据项目的实际需求进行扩展。同样可以将需要新增的数据封装成一个列表,然后通过遍历列表的方式进行批量新增。 如果项目中没有引用Mybatis-plus,但是仍然想进行批量操作,并且数据量较大时,可以参考Mybatis-plus的批量操作方式,在Mybatis环境下自己编写批量操作的代码。可以使用Mybatis批量操作功能,通过编写自定义的工具类来实现批量修改和批量新增操作。 在代码中,可以通过SqlSessionFactory获取SqlSession,并根据需要获取对应的Mapper。然后将需要处理的数据列表和Mapper传入自定义的方法中,通过循环遍历数据列表,在每一次循环中执行对应的操作。可以设置一个批处理的阈值,当达到这个阈值时,执行批处理操作。最后,在非事务环境下强制提交事务。 总结来说,Mybatis-plus提供了方便的批量处理功能,可以通过它来实现批量新增和批量修改。如果需要根据其他字段进行操作,可以自行扩展。如果项目中没有引用Mybatis-plus,但仍想进行批量操作,可以参考Mybatis-plus的批量操作方式,在Mybatis环境下编写自定义的批量操作代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Mybatis-plus批量操作](https://blog.csdn.net/WayneLee0809/article/details/126424482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值