报错sql如下:
<update id="updateBatch"> <foreach collection="list" item="item" index="index" separator=";"> update ICS_TASK_DETAILS set EXE_PEOPLE_ID = #{item.exePeopleId}, STATUS = #{item.status}, EXE_TIME = #{item.exeTime} where CAL_TASK_ID = #{item.calTaskId} and TASK_ID = #{item.taskId} </foreach> </update>
修改后sql如下,注意新增begin和;end;
<update id="updateBatch"> begin <foreach collection="list" item="item" index="index" separator=";"> update ICS_TASK_DETAILS <set> EXE_PEOPLE_ID = #{item.exePeopleId}, STATUS = #{item.status}, EXE_TIME = #{item.exeTime} </set> where CAL_TASK_ID = #{item.calTaskId} and TASK_ID = #{item.taskId} </foreach> ;end; </update>
批量更新时,foreach对传入的数据迭代更新操作,foreach中主要存在collection、item、index、open、separate、close几个参数:
collection为指定,指代Dao层接口传递的数据类型,分别是list、数组array和map。
item:别名,表示集合中每一个元素迭代时的别名,获取数据时必须指定用别名来指定,如例子中所示,迭代循环时,使用item来获取属性值。
index:迭代下标,即迭代过程中的位置。
open:表示语句以什么开始。
separate:表示每次迭代之间以什么符号作为分割。
close:表示语句以什么结束。
欢迎批评指正。