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();
}
}