Vložit uvnitř Mybatis foreach není dávkový , jedná se o jediný (může se stát obřím) SQL příkazem a přináší nevýhody:
- některé databáze, jako je zde Oracle, nepodporuje.
- v relevantních případech:bude potřeba vložit velký počet záznamů a bude dosažen limit nakonfigurovaný v databázi (ve výchozím nastavení kolem 2000 parametrů na příkaz) a případně může dojít k chybě zásobníku DB, pokud bude samotný příkaz příliš velký.
Iterace kolekce se nesmí provádět v mybatis XML. Stačí provést jednoduché Vložit prohlášení v Java Foreach smyčka.Nejdůležitější je typ relace Executor .
SqlSession session = sessionFactory.openSession(ExecutorType.BATCH);
for (Model model : list) {
session.insert("insertStatement", model);
}
session.flushStatements();
Případně si myslím, že zde bude stačit použít ExecutorType.REUSE bez splachovacích příkazů.
Na rozdíl od výchozího ExecutorType.SIMPLE , příkaz bude připraven jednou a proveden pro každý záznam, který má být vložen.