废话不多说,直接上代码.
<!-- 批量更新指标分数和级别-->
<update id="updateAll" parameterType="com.futuredata.web.assess.pojo.WordVO">
update assess_factor_copy set fxjb=case id
<foreach collection="list" item="item">
when #{item.id} then #{item.fxjb}
</foreach>
end,
score=case id
<foreach collection="list" item="item">
when #{item.id} then #{item.score}
</foreach>
end
where id in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")">
#{item.id}
</foreach>
</update>
解释下, a= case b when c then d end函数表示,当b=c的时候另a=d 所以配合foreach的循环可以实现批量更新数据
容易遇到的坑这里给大家点出来
1.对于多字段,最后一个end后面不需要带标点符号.
2.最后的where id in ()这个不可以省略掉,原因有两个,一是可以提高效率,二是防List集合不包含的id行数据被覆盖置为NULL