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>

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐