sql >> Database >  >> RDS >> Oracle

foreach gebruiken om batch-insertie te doen met mybatis

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.



  1. Verdeel gegevens in kolommen in mysql

  2. SQL-dump converteren naar JSON?

  3. Verschil tussen bit- en booleaanse datatypes in PostgreSQL

  4. Voorbeelden van MySQL-query's met antwoorden