mybatis 分批次手动提交事务

📅 2026/7/28 16:09:00 👤 编程新知 🏷️ 技术资讯
mybatis 分批次手动提交事务 Autowired private SqlSessionFactory sqlSessionFactory; public boolean saveOrUpdateStockBatch(ListSaleStockPO entityList, int batchSize, StockOperationTypeEnum operationTypeEnum) { // 此种提交方法会导致新增后主键无法回显暂时废弃 SqlSession session sqlSessionFactory.openSession(ExecutorType.BATCH, false); SaleStockDAO mapper session.getMapper(SaleStockDAO.class); try { if (entityList.size() batchSize) { executeStock(operationTypeEnum, mapper, entityList); } else { ListSaleStockPO list Lists.newArrayList(); for (int i 0; i entityList.size(); i) { list.add(entityList.get(i)); if (i 1 i % batchSize 0) { executeStock(operationTypeEnum, mapper, list); session.commit(); session.clearCache(); list.clear(); } } if (CollectionUtil.isNotEmpty(list)) { executeStock(operationTypeEnum, mapper, list); } } session.commit(); session.clearCache(); } catch (Exception e) { logger.error(CharConstant.ERROR, e); session.rollback(); ExceptionUtils.throwServiceException(ErrorCodeConstant.STOCK_UPDATE_FAIL); } finally { session.close(); } return true; private void executeStock(StockOperationTypeEnum operationTypeEnum, SaleStockDAO mapper, ListSaleStockPO list) { mapper.batchInsertIgnore(list); }