Mysql 的CASE WHENTHEN 解释,批量更新数据应用场景(update foreach)【详细】

CASE xxx WHEN 是 MySQL 的 CASE 语句中的一种写法,用于在条件满足时返回对应的值。语法格式如下:

CASE value 
  WHEN compare_value1 THEN result1 
  WHEN compare_value2 THEN result2 
  ...
  [ ELSE resultN ] 
END;

其中,value 是需要比较的值,可以是字段名、变量、表达式等;compare_value1、compare_value2 等是需要比较的值,可以是常量、表达式等;result1、result2 等是对应比较值相等时返回的结果;ELSE resultN 是可选的,表示当没有任何一个比较值与 value 相等时返回的结果。如果没有 ELSE 子句,当没有任何一个比较值与 value 相等时返回 NULL。

在 MyBatis 的 标签中使用 CASE id WHEN,是为了在更新 my_table 表的 status 字段时,只更新传入的对象列表中指定的记录,避免将不需要更新的记录也一并更新。具体实现方式是,将传入的对象列表中的每个对象的 id 和 status 映射到 SQL 语句中的 WHEN 子句中,只有当当前记录的 id 与传入的对象列表中的某个 id 相等时,才将对应的 status 值更新到数据库中。当不满足任何一个 WHEN 子句时,将使用 ELSE status 子句返回原始的 status 值,避免对不需要更新的记录进行误操作。

例如,假设有一个 my_table 表,包含 id 和 status 两个字段,其中有三条记录:

在这里插入图片描述

如果传入的对象列表中包含以下两个对象:

List<MyEntity> list = new ArrayList<>();
list.add(new MyEntity(1, 3));
list.add(new MyEntity(4, 2));

那么生成的 SQL 语句将会是:

UPDATE my_table SET status = 
  CASE id WHEN 1 THEN 3 ELSE status END,
  CASE id WHEN 4 THEN 2 ELSE status END
WHERE id IN (1, 4);

这个 SQL 语句的意思是,将 my_table 表中 ID 为 1 的记录的 status 值更新为 3,将 ID 为 4 的记录的
status 值更新为 2,不对 ID 为 2 和 3 的记录进行操作。

程序中批量更新应用案例

<update id="updateListById">
        UPDATE table_name
        SET status =CASE id
        <trim suffix="END">
            <foreach collection="condition" item="item" index="index" >
                WHEN #{item.id} THEN #{item.status}
            </foreach>
        </trim>
        WHERE id IN
        <foreach collection="condition" item="item" index="index" open="(" separator="," close=")">
            #{item.id}
        </foreach>
    </update>
  • 踩坑点:case的foreach里面不能使用separator=",”
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值