Я хочу использовать партию 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 должны быть распечатаны.