Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verwenden Sie foreach, um eine Stapeleinfügung mit mybatis durchzuführen

Einfügen in Mybatis foreach ist kein Stapel , dies ist eine einzige (könnte riesig werden) SQL-Anweisung und das bringt Nachteile mit sich:

  • Einige Datenbanken wie Oracle hier werden nicht unterstützt.
  • in relevanten Fällen:Es muss eine große Anzahl von Datensätzen eingefügt werden, und das konfigurierte Datenbanklimit (standardmäßig etwa 2000 Parameter pro Anweisung) wird erreicht, und möglicherweise ein DB-Stack-Fehler, wenn die Anweisung selbst zu groß wird.

Iteration über die Sammlung darf nicht im mybatis XML erfolgen. Führen Sie einfach ein einfaches Insert aus -Anweisung in einem Java-Foreach loop.Das Wichtigste ist der Session-Executor-Typ .

SqlSession session = sessionFactory.openSession(ExecutorType.BATCH);
for (Model model : list) {
    session.insert("insertStatement", model);
}
session.flushStatements();

Ich denke, dass es hier ausreichen wird, ExecutorType.REUSE zu verwenden ohne Spülanweisungen.

Anders als standardmäßig ExecutorType.SIMPLE , wird die Anweisung einmal vorbereitet und für jeden einzufügenden Datensatz ausgeführt.