sql >> Database >  >> RDS >> Oracle

MyBatis Batch invoegen/update voor Oracle

Het geaccepteerde antwoord is niet de aanbevolen manier om batchbewerkingen af ​​te handelen. Het toont geen echte batch-statements, omdat de batch-uitvoerder-modus moet worden gebruikt bij het openen van een sessie. Zie dit bericht waarin een bijdrager van een code aanbeveelt dat de juiste manier om batchgewijs bij te werken (of in te voegen) is om een ​​sessie in batchmodus te openen en herhaaldelijk update (of invoegen) aan te roepen voor een enkele record.

Dit is wat voor mij werkt:

public void updateRecords(final List<GisObject> objectsToUpdate) {
    final SqlSession sqlSession = MyBatisUtils.getSqlSessionFactory().openSession(ExecutorType.BATCH);
    try {
        final GisObjectMapper mapper = sqlSession.getMapper(GisObjectMapper.class);
        for (final GisObject gisObject : objectsToUpdate) {
            mapper.updateRecord(gisObject);
        }
        sqlSession.commit();
    } finally {
        sqlSession.close();
    }
}

Gebruik foreach niet in uw update/insert en zorg ervoor dat het slechts één record bijwerkt/insert. Ik kwam onoplosbare orakelfouten tegen door het te doen volgens het geaccepteerde antwoord (ongeldig teken, verklaring niet beëindigd, enz.). Zoals het gelinkte bericht aangeeft, is de update (of insert) die in het geaccepteerde antwoord wordt weergegeven eigenlijk gewoon een gigantische sql-instructie.



  1. Alle gebruikers in PostgreSQL weergeven?

  2. JDBC Create Table Voorbeeld Gebruiksverklaring

  3. Hoe kan ik fouten voor mijn MySQLi-query weergeven?

  4. Overstappen van MySQL 5.7 naar MySQL 8.0 - Wat u moet weten