最近遇到了一个关于批量修改的需求,想了一种方法,不知道是否有更好的解法,求指教(虽然并没人看)
1.需求是处理一个list对象,根据对象的批次号和项目id属性批量更改数据库一个状态字段。
举例表数据如下:
pch | xmid | status |
---|---|---|
abc | cba | 0 |
bcd | cba | 0 |
abd | cba | 0 |
类型为List<Map<String,Object>>
的集合如下:
[
{
"pch": "abc",
"xmid": "cba"
},
{
"pch": "bcd",
"xmid": "cba"
}
]
将符合该集合条件的数据status记录改为1
2.Mapper.xml语句为:
<update id="batchUpdate" parametertype="java.util.List">
update table_name t
set t.status=
( case
<foreach collection="list" item="item" index="index" open="" close="" separator="">
when t.pch=#{item.pch,jdbcType=VARCHAR} and t.xmid=#{item.xmid,jdbcType=VARCHAR} then 1
</foreach>
else t.status end )
where t.pch in
<foreach collection="list" item="item" index="index" open="(" close=")" separator=",">
'${item.pch}'
</foreach>
</update>