mybatis判断批量操作是否全部执行成功

2024-04-18 09:24:53 浏览数 (1)

报纸是这个世界的镜子。——埃利斯

例如这样的代码:

代码语言:javascript复制
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.ExecutorType;
import java.util.List;
import org.apache.ibatis.executor.BatchResult;

public class BatchOperationExample {
    public boolean checkAllBatchResultsSuccessful(List<BatchResult> batchResults) {
        for (BatchResult result : batchResults) {
            int[] updateCounts = result.getUpdateCounts();
            for (int count : updateCounts) {
                if (count <= 0) {  // 根据实际情况选择判断条件,有些情况下可能需要 count == 0
                    return false;  // 如果任何一个操作没有成功更新,则返回失败
                }
            }
        }
        return true;  // 所有操作都成功更新
    }

    public static void main(String[] args) {
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtil.getSqlSession(ExecutorType.BATCH);
            // 假设有一个Mapper接口和对应的操作,例如:
            // UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            // 执行批处理操作,例如:
            // mapper.insertUser(user1);
            // mapper.insertUser(user2);
            // ... 执行更多的批处理操作 ...

            sqlSession.commit();
            List<BatchResult> batchResults = sqlSession.flushStatements();

            BatchOperationExample example = new BatchOperationExample();
            boolean allSuccess = example.checkAllBatchResultsSuccessful(batchResults);
            System.out.println("All batch operations successful: "   allSuccess);
        } catch (Exception e) {
            sqlSession.rollback();
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
}

不过也可以用Stream流的写法

代码语言:javascript复制
batchResults.stream().flatMapToInt(r-> IntStream.of(r.getUpdateCounts())).allMatch(i->i>0);

核心就一点,就是注意每一个getUpdateCounts都大于0即可

0 人点赞