在数据表操作中,批量更新数据行记录中的部分字段是很常见的操作。以下示例为在Mybatis框架下使用case when语句实现数据行记录批量更新。
以下示例为批量更一个订单中多个商品的数量和颜色。
商品对应的Java类:
public class Sku {
private Long id;
private String orderNo;
private String skuId;
private Integer skuCount;
private String skuColor;
}
Mybatis中的Mapper接口:
public class SkuMapper {
int batchUpdateById(@Param("list") List<Sku> skuList);
}
Mybatis对应的xml文件中相应代码:
<update id = "batchUpdateByOrderId" parameterType = "java.util.List">
update sku
<trim prefix="set" suffixOverrides=",">
<trim prefix="sku_count = case" suffix="end,">
<foreach collection="list" item="item">
<if test="item.skuCount!=null">
when id = #{item.id} then #{item.skuCount}
</if>
</foreach>
</trim>
<trim prefix="sku_color = case" suffix="end,">
<foreach collection="list" item="item">
<if test="item.skuColor!=null">
when id = #{item.id} then #{item.skuColor}
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item.id,jdbcType=BIGINT}
</foreach>
</>