Я также изучаю Ibatis / MyBatis и постепенно овладеваю им. Я не могу рассказать вам обо всех различных атрибутах sqlMapConfig, так как я не уверен в некоторых настройках, но я полагаю, вы хотите, чтобы несколько вставок были включены в одну транзакцию? Подобно пакетному обновлению, оберните пакет в одну транзакцию. Этот пример основан на IBatis 2.3.4
try {
sqlMap.startTransaction();
sqlMap.startBatch();
for (final ObjectXXXDTO objectReference1 : GenericObjectList) {
sqlMap.insert("createExample1", objectReference1);
}
sqlMap.insert("createExample2", otherReference2);
sqlMap.insert("createExample3", otherReference3);
sqlMap.executeBatch();
sqlMap.commitTransaction();
} catch (final SQLException e) {
throw new XXXException(e);
} finally {
try {
sqlMap.endTransaction();
} catch (SQLException e) {
throw new XXXException(e);
}
}
Однако учтите, что всякий раз, когда вы используете пакетный набор операторов, сгенерированные базой данных ключи не будут генерироваться, пока вы не вызовете метод executeBatch()
. Это означает, что если вы используете selectKey
для обновления ваших объектов сгенерированными ключами, они будут возвращать ноль. Если у вас есть какой-либо объект, для которого требуется, чтобы вновь сгенерированный ключ был частью другой вставки, вы можете выполнить эту вставку или обновить до startBatch()
.
Опять же, я не уверен, что вы выбрали именно такой подход, но я все равно решил опубликовать его. Спасибо