摘要
mybatis批量增加,mybatis批量减少某字段值,mybatis批量更新
需求描述
业务需求是用户批量提交50万条国际短信,每个国家发送价格可能不一样,故扣费50万次。
扣费操作在缓存中进行,然后定期同步到数据库中,扣减库中余额。
笔者在更新时,打算把变更做批量更新,网上批量更新多是批量设置值,如原值1,变更为2;却没有原值是1,变更后为1+2的文章。
笔者写此文章,希望能给大家一些帮助。
mybatis
<update id="updateBalanceBatch">
UPDATE account_balance
<trim prefix="SET" suffixOverrides=",">
<trim prefix="balance =case" suffix="end,">
<foreach collection="list" item="item" index="index">
when account_name =#{item.accountName} then account_balance.balance + #{item.balance,jdbcType=DECIMAL}
<!-- account_balance.balance 这里是原值 -->
<!-- 新值 = 原值 + 变更值 -->
</foreach>
</trim>
</trim>
where account_name in
<foreach collection="list" item="item" index="index" separator="," open="(" close=")">
#{item.accountName,jdbcType=VARCHAR}
</foreach>
</update>
mysql
UPDATE account_balance
SET balance =
CASE
WHEN account_name ='cl111' THEN account_balance.balance + 1
WHEN account_name ='cl222' THEN account_balance.balance + 1
WHEN account_name ='cl333' THEN account_balance.balance + 2
END
WHERE
account_name IN (
'cl111',
'cl222',
'cl333'
)