Câu trả lời được chấp nhận không phải là cách được khuyến nghị để xử lý các hoạt động hàng loạt. Nó không hiển thị các câu lệnh hàng loạt thực sự vì chế độ thực thi hàng loạt sẽ được sử dụng khi mở một phiên. Xem bài đăng này, trong đó một người đóng góp mã đã đề xuất rằng cách thích hợp để cập nhật hàng loạt (hoặc chèn) là mở một phiên ở chế độ hàng loạt và liên tục gọi cập nhật (hoặc chèn) cho một bản ghi.
Đây là những gì phù hợp với tôi:
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();
}
}
Không sử dụng foreach trong cập nhật / chèn của bạn và đảm bảo rằng nó chỉ cập nhật / chèn một bản ghi duy nhất. Tôi đã gặp phải lỗi tiên tri không thể giải quyết bằng cách thực hiện nó theo câu trả lời được chấp nhận (ký tự không hợp lệ, câu lệnh chưa kết thúc, v.v.). Như bài đăng được liên kết chỉ ra, cập nhật (hoặc chèn) được hiển thị trong câu trả lời được chấp nhận thực sự chỉ là một câu lệnh sql khổng lồ.