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.