Java MyBatis, как получить пакетные результаты? - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу использовать партию mybatis.Но результат пакетной обработки -214748266.Итак, sqlSession без автокомитета включен.Понятно, что результат может быть получен с помощью flushStatements ().

Проблема здесь заключается в sqlSession.Как определить, произошел ли сбой пакета с помощью List [BatchResult], возвращаемое значение flushStemnets ().

Шесть запросов были выполнены как пакет.

List[BatchResult] batchResults = sqlSession.flushStations();

Если вы обойдете batchResults in, вы найдете следующие значения:

i = 0, j = 0, getUpdateCounts = -2
i = 1, j = 0, getUpdateCounts = -2
i = 2, j = 0, getUpdateCounts = -2
i = 3, j = 0, getUpdateCounts = -2
i = 4, j = 0, getUpdateCounts = -2
i = 5, j = 0, getUpdateCounts = -2
i = 6, j = 0, getUpdateCounts = -2

i - индекс списка пакетных результатов.j равен BatResults.get(i) .Index getUpdateCounts.

-2, по-видимому, выводит одно и то же значение независимо от того, успешен запрос или нет.

Вывод -2 при попытке удаления был одинаковымнезарегистрированная строка.

try (SqlSession sqlSession = openSession(ExecutorType.BATCH, false)) {
      Iterator<String> iterator = Splitter.on(",").split(messageDto.getPHN_NO()).iterator();
      while (iterator.hasNext()) {
        String phoneNumber = iterator.next();
        messageDto.setMSG_SUB_ID(AutoIncrement.getAutoIncrement());
        messageDto.setPHN_NO(phoneNumber);
        queryParameter.setMessage(messageDto);

        stopwatch = Stopwatch.createStarted();
        System.out.println(sqlSession.insert(insertQueryMapperId, queryParameter));
        stopwatch.stop();
        after(insertQueryMapperId, stopwatch, queryParameter);
        count++;
      }

      stopwatch = Stopwatch.createStarted();
      queryParameter.setMessage(originalMessageDto);
      sqlSession.delete(deleteQueryMapperId, queryParameter);
      stopwatch.stop();
      after(insertQueryMapperId, stopwatch, queryParameter);

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

      log.info(MARKER_SYSTEM, batchResults.toString());

      for (int i = 0; i < batchResults.size(); i++) {
        for (int j = 0; j < batchResults.get(i).getUpdateCounts().length; j++) {
          System.out.println("i = " + i + ", j = " + j + ", getUpdateCounts = " + batchResults.get(i).getUpdateCounts()[j]);
          batchCount += batchResults.get(i).getUpdateCounts()[j];
        }
      }

      if ((count+1)*(-2) >= batchCount) {
        sqlSession.commit();
      } else {
        sqlSession.rollback();
      }
}

Мой прогноз состоит в том, что в случае успеха, 1 или 1 должны быть распечатаны.

...