Det accepterade svaret är inte det rekommenderade sättet att hantera batchoperationer. Den visar inte sanna batchsatser eftersom batchexekveringsläget ska användas när en session öppnas. Se det här inlägget där en kodbidragsgivare rekommenderade att det korrekta sättet att batchuppdatering (eller infoga) är att öppna en session i batchläge och upprepade gånger anropa uppdatering (eller infoga) för en enda post.
Det här fungerar för mig:
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();
}
}
Använd inte foreach i din uppdatering/infogning och se till att den bara uppdaterar/infogar en enda post. Jag stötte på olösliga orakelfel genom att göra det enligt det accepterade svaret (ogiltigt tecken, uttalande inte avslutat, etc.). Som det länkade inlägget indikerar är uppdateringen (eller infogningen) som visas i det accepterade svaret faktiskt bara ett gigantiskt SQL-uttalande.