sql >> Database teknologi >  >> RDS >> Oracle

bruger foreach to do batch-indsættelse med mybatis

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.



  1. GROUP BY returnerer den første post

  2. Udløser kun for ændrede værdier

  3. Få antallet af poster i undertabel

  4. Hvordan Tan() virker i PostgreSQL