MyBatis批量更新为oracle

时间:2014-09-15 19:48:22

标签: mybatis batch-updates

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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:-1)

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

这对我有用:

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