sql >> Databasteknik >  >> RDS >> Oracle

använder foreach to do batchinlägg med mybatis

Infoga inuti Mybatis foreach är inte batch , detta är en enda (kan bli jättelik) SQL-sats och det medför nackdelar:

  • någon databas som Oracle här stöder inte.
  • i relevanta fall:det kommer att finnas ett stort antal poster att infoga och den databaskonfigurerade gränsen (som standard cirka 2000 parametrar per sats) kommer att träffas, och så småningom eventuellt DB-stackfel om själva satsen blir för stor.

Iteration över samlingen får inte göras i mybatis XML. Kör bara en enkel Infogning uttalande i en Java Foreach loop.Det viktigaste är session Executor-typen .

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

Jag tror att det här kommer att räcka att använda ExecutorType.REUSE utan att spola påståenden.

Till skillnad från standard ExecutorType.SIMPLE , kommer satsen att förberedas en gång och exekveras för varje post som ska infogas.



  1. MySQL offset oändliga rader

  2. Välj objekt från olika källor och ordna efter datum

  3. Exportera frågeresultat till .csv-fil i SQL Server 2008

  4. Ställ in MySQL databas tidszon till GMT