mybatis xml 多条件多字段批量更新

mybatis xml 多条件多字段批量更新​

1. dao 层:

void commUpdateBatchData(@Param("tableName") String tableName,
                             @Param("mapList") List<Map<String, Object>> mapList,
                             @Param("cols") List<String> cols,
                             @Param("mof") String mof,
                             @Param("fiscal") String fiscal);

2. mapper层

2.1. 方式1:

<update id="commUpdateBatchData">
        update ${tableName}
        <trim prefix="set" suffixOverrides=",">
            <foreach collection="cols" item="key">
                ${key} = case guid
                <foreach collection="mapList" item="item" separator=" " open=" " close="end,">
                    when #{item.guid} then #{item.${key}}
                </foreach>
            </foreach>
        </trim>
        where guid in
        <foreach collection="mapList" index="index" item="item" separator="," open="(" close=")">
            #{item.guid}
        </foreach>
        <if test="mof!= null and mof!= '' ">
            and mof = #{mof}
        </if>
        <if test="fiscal != null and fiscal!= '' ">
            and fiscal= #{fiscal}
        </if>
    </update>

2.2. 方式2:

<update id="commUpdateBatchData">
        merge into ${tableName} t
        using (
        <trim prefix="" suffixOverrides="union">
            <foreach collection="mapList" item="item">
                <foreach collection="cols" item="key" separator="," open=" select" close="from dual union">
                    #{item.${key}} as ${key}
                </foreach>
            </foreach>
        </trim>
        ) s
        on (t.guid = s.guid and t.mof = s.mofand t.fiscal = s.fiscal)
        when matched then
        update set
            <foreach collection="cols" item="key" separator="," open=" " close=";">
                <if test="key != 'guid'.toString() and key != 'mof'.toString() and key != 'fiscal'.toString()">
                    t.${key} = s.${key}
                </if>
            </foreach>
    </update>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值