Indsæt inde i Mybatis foreach er ikke batch , dette er en enkelt (kunne blive kæmpe) SQL-sætning, og det medfører ulemper:
- en eller anden database, såsom Oracle her, understøtter ikke.
- i relevante tilfælde:der vil være et stort antal poster at indsætte, og den databasekonfigurerede grænse (som standard omkring 2000 parametre pr. sætning) vil blive ramt, og i sidste ende muligvis DB-stakfejl, hvis selve sætningen bliver for stor.
Gentagelser over samlingen må ikke udføres i mybatis XML. Bare udfør en simpel Indsæt erklæring i en Java Foreach loop.Det vigtigste er session Executor-typen .
SqlSession session = sessionFactory.openSession(ExecutorType.BATCH);
for (Model model : list) {
session.insert("insertStatement", model);
}
session.flushStatements();
Jeg tror, at her vil det være nok at bruge ExecutorType.REUSE uden at skylle udsagn.
I modsætning til standard ExecutorType.SIMPLE , vil erklæringen blive forberedt én gang og udført for hver post, der skal indsættes.