Infoga inuti Mybatis foreach är inte batch , detta är en enda (kan bli jättelik) SQL-sats och det medför nackdelar:
- någon databas som Oracle här stöder inte.
- i relevanta fall:det kommer att finnas ett stort antal poster att infoga och den databaskonfigurerade gränsen (som standard cirka 2000 parametrar per sats) kommer att träffas, och så småningom eventuellt DB-stackfel om själva satsen blir för stor.
Iteration över samlingen får inte göras i mybatis XML. Kör bara en enkel Infogning uttalande i en Java Foreach loop.Det viktigaste är session Executor-typen .
SqlSession session = sessionFactory.openSession(ExecutorType.BATCH);
for (Model model : list) {
session.insert("insertStatement", model);
}
session.flushStatements();
Jag tror att det här kommer att räcka att använda ExecutorType.REUSE utan att spola påståenden.
Till skillnad från standard ExecutorType.SIMPLE , kommer satsen att förberedas en gång och exekveras för varje post som ska infogas.