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

utilizzando foreach per eseguire l'inserimento in batch con mybatis

Inserisci dentro Mybatis foreach non è batch , questa è una singola istruzione SQL (potrebbe diventare gigantesca) e ciò comporta degli svantaggi:

  • alcuni database come Oracle qui non supportano.
  • in casi rilevanti:ci sarà un gran numero di record da inserire e verrà raggiunto il limite configurato del database (per impostazione predefinita circa 2000 parametri per istruzione), ed eventualmente un errore di stack del DB se l'istruzione stessa diventa troppo grande.

L'iterazione sulla raccolta non deve essere eseguita nell'XML di mybatis. Basta eseguire un semplice Inserisci dichiarazione in un Java Foreach loop.La cosa più importante è il tipo di Executor di sessione .

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

Penso che qui sia sufficiente usare ExecutorType.REUSE senza svuotare le dichiarazioni.

A differenza di ExecutorType.SIMPLE predefinito , la dichiarazione verrà preparata una volta ed eseguita per ogni record da inserire.