Invoegen binnen Mybatis foreach is geen batch , dit is een enkele (kan een gigantische) SQL-instructie worden en dat brengt nadelen met zich mee:
- sommige databases zoals Oracle hier bieden geen ondersteuning.
- in relevante gevallen:er zal een groot aantal records moeten worden ingevoegd en de door de database geconfigureerde limiet (standaard ongeveer 2000 parameters per instructie) zal worden bereikt, en uiteindelijk mogelijk een DB-stackfout als de instructie zelf te groot wordt.
- /li>
Iteratie over de collectie mag niet worden gedaan in de mybatis XML. Voer gewoon een eenvoudige Insert uit verklaring in een Java Forreach loop.Het belangrijkste is het type Session Executor .
SqlSession session = sessionFactory.openSession(ExecutorType.BATCH);
for (Model model : list) {
session.insert("insertStatement", model);
}
session.flushStatements();
Ik denk dat het hier voldoende zal zijn om ExecutorType.REUSE te gebruiken zonder flushing statements.
In tegenstelling tot standaard ExecutorType.SIMPLE , wordt de instructie één keer voorbereid en uitgevoerd voor elke record die moet worden ingevoegd.