基于mybatis批量操作

1、注入SqlSessionTemplate 对象

    @Autowired
    private SqlSessionTemplate sqlSessionTemplate;

2、开启批量提交事务

SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);

3、获取mapper对象

OrderDAO mapper = sqlSession.getMapper(OrderDAO.class);

4、调用mapper里的方法,比如 新增、更新等操作

mapper.updateById(orderPOS.get(i));

5、批量提交事务、清除缓存

// 提交事务
sqlSession.commit();
// 清除缓存
sqlSession.clearCache();

6、最后示例代码

public void updateBatch(List<OrderUpdateDTO> orderUpdateDTOS) {
        List<OrderPO> orderPOS = BeanUtil.copyToList(orderUpdateDTOS, OrderPO.class);
        // 获取 SqlSession openSession(设置 ExecutorType.BATCH, false) ,开启批量提交事务
        SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
        try {
            // 获取 mapper 对象
            OrderDAO mapper = sqlSession.getMapper(OrderDAO.class);
            for (int i = 0; i < orderPOS.size(); i++) {
                // 调用 mapper 里的方法(可以选择:新增、更新、新增或者更新 等方法),由于上面的设置, 这里不会直接提交事务
                mapper.updateById(orderPOS.get(i));
                if (i % 100 == 0 || i == orderPOS.size() - 1) {
                    // 每执行 100 次, 提交一次事务
                    sqlSession.commit();
                    // 清除缓存
                    sqlSession.clearCache();
                }
            }
        } catch (Exception e) {
            log.error("batch update error.{}", e);
            // 异常回滚
            sqlSession.rollback();
        } finally {
            // 执行完毕关闭本次会话
            sqlSession.close();
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值