动态sql批量插入数据

核心逻辑即为mysql批量插入数据

1 动态sql批量插入单表

mapper层 集合入参 入参字段符合动态sql字段

 
 void updateBatchRefresh(List<WccsInfoPreviousDayResp> wccsInfoPreviousDayResps );

xml层

<update id="updateBatchRefresh" parameterType="java.util.List">
        <!--@mbg.generated-->
        update poc_extend_info
        <trim prefix="set" suffixOverrides=",">
            <trim prefix="wccs_supply_info_type = case" suffix="end,">
                <foreach collection="list" index="index" item="item">
                    <if test="item.pocMiddleId != null">
                        when poc_middle_id = #{item.pocMiddleId,jdbcType=VARCHAR} then #{item.ghlx}
                    </if>
                </foreach>
            </trim>
            <trim prefix="wccs_customer_group_code = case" suffix="end,">
                <foreach collection="list" index="index" item="item">
                    <if test="item.pocMiddleId != null">
                        when poc_middle_id = #{item.pocMiddleId,jdbcType=VARCHAR} then #{item.chainStoresDm}
                    </if>
                </foreach>
            </trim>
        </trim>
        where poc_middle_id in
        <foreach close=")" collection="list" item="item" open="(" separator=", ">
            #{item.pocMiddleId,jdbcType=VARCHAR}
        </foreach>

    </update>

2 多表关联批量插入

两张表做关联,同时更新了 pei表的字段和 pbi表的两个字段。
日常开发中,一般都是用单表 UPDATE 语句,很少写多表关联的 UPDATE。

<update id="updateTable">
        UPDATE poc_extend_info pei
        INNER JOIN poc_base_info pbi ON pei.poc_middle_id = pbi.poc_middle_id
        <trim prefix="set" suffixOverrides=",">
            <trim prefix="pei.wccs_supply_info_type = case" suffix="end,">
                <foreach collection="list" index="index" item="item">
                    <if test="item.pocMiddleId != null">
                        when pei.poc_middle_id = #{item.pocMiddleId,jdbcType=VARCHAR} then #{item.ghlx}
                    </if>
                </foreach>
            </trim>
            <trim prefix="pei.wccs_customer_group_code = case" suffix="end,">
                <foreach collection="list" index="index" item="item">
                    <if test="item.pocMiddleId != null">
                        when pei.poc_middle_id = #{item.pocMiddleId,jdbcType=VARCHAR} then #{item.chainStoresDm}
                    </if>
                </foreach>
            </trim>
            <trim prefix="pbi.social_uniform_credit_code = case" suffix="end,">
                <foreach collection="list" index="index" item="item">
                    <if test="item.pocMiddleId != null">
                        when pbi.poc_middle_id = #{item.pocMiddleId,jdbcType=VARCHAR} then #{item.socialCreditCode}
                    </if>
                </foreach>
            </trim>
        </trim>
        where pei.poc_middle_id in
        <foreach close=")" collection="list" item="item" open="(" separator=", ">
            #{item.pocMiddleId,jdbcType=VARCHAR}
        </foreach>
    </update>

1 在 MySQL 中,可以使用“UPDATE table1 t1,table2,...,table n”的方式来多表更新


mysql> UPDATE pbi p, pei pp SET pp.price = p.price * 0.8 WHERE p.productid= pp.productId;
Query OK, 5 rows affected (0.02 sec)

2 inner join


mysql> UPDATE pbi p, pei pp SET pp.price = p.price * 0.8 WHERE p.productid= pp.productId;
Query OK, 5 rows affected (0.02 sec)

3 left join


mysql> UPDATE product p, product_price pp SET pp.price = p.price * 0.8 WHERE p.productid= pp.productId;
Query OK, 5 rows affected (0.02 sec)

4 子查询


mysql> UPDATE pei pp SET price=(SELECT price*0.8 FROM pbi WHERE productid = pp.productid);
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5  Changed: 5  Warnings: 0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值