我正在尝试用oracle数据库在myBatis中进行批量更新,在那里我必须更新10K以上的记录。但是当我使用低于
我收到一个异常说"无效字符"。当我多次执行单个更新语句时,它运行良好。如果你已经尝试过这个,请帮助你的例子。
<update id="batchUpdate">
<foreach collection="empList" item="employee" separator=";">
UPDATE Employee
SET EMP_JOBTITLE = #{employee.jobTitle},
EMP_STATUS = #{employee.status}
WHERE Employee_ID = #{employee.empId}
</foreach>
</update>
如果使用Oracle:
<update id="batchUpdate">
call
begin
<foreach collection="empList" item="employee" close=";" eparator=";">
UPDATE Employee
SET EMP_JOBTITLE = #{employee.jobTitle},
EMP_STATUS = #{employee.status}
WHERE Employee_ID = #{employee.empId}
</foreach>
end
</update>
我没能解决这个错误,但在这篇文章中,一位代码贡献者建议,批量更新的正确方法是以批处理模式打开会话,并重复调用单个记录的更新。
以下是适用于我的:
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();
}
}
然后,删除更新中的foreach并将其修改为更新单个记录(删除"employee")