Вмъкване вътре в Mybatis foreach не е партидата , това е единичен (може да стане гигантски) SQL израз и носи недостатъци:
- някои бази данни като Oracle тук не се поддържат.
- в подходящи случаи:ще има голям брой записи за вмъкване и конфигурираното ограничение на базата данни (по подразбиране около 2000 параметъра на оператор) ще бъде достигнато и евентуално евентуална грешка в стека на DB, ако самият оператор стане твърде голям.
Итерация върху колекцията не трябва да се извършва в mybatis XML. Просто изпълнете просто Insert израз в Java Foreach цикъл.Най-важното е типът Изпълнител на сесия .
SqlSession session = sessionFactory.openSession(ExecutorType.BATCH);
for (Model model : list) {
session.insert("insertStatement", model);
}
session.flushStatements();
Мисля, че тук ще бъде достатъчно да използвате ExecutorType.REUSE без изчистване на изрази.
За разлика от ExecutorType.SIMPLE по подразбиране , операторът ще бъде подготвен веднъж и изпълнен за всеки запис за вмъкване.