0

我正在尝试使用 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>
4

2 回答 2

0

如果您使用 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>
于 2015-01-08T19:19:09.200 回答
-1

我无法解决该错误,但遇到了这篇文章,其中代码贡献者建议批量更新的正确方法是以批处理模式打开会话并重复调用更新单个记录。

这对我有用:

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 并修改它以更新单个记录(删除“员工”。)

于 2015-03-25T19:16:25.530 回答