MyBatis为oracle进行批量更新



我正在尝试用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")

相关内容

  • 没有找到相关文章

最新更新