Mysql、Mybatis 批量更新范例

2 篇文章 0 订阅
UPDATE tableName
    SET
         orderId1 = CASE id 
            WHEN 1 THEN 3 
            WHEN 2 THEN 4 
            WHEN 3 THEN 5 
        END,
        orderId2 = CASE id 
            WHEN 1 THEN 3 
            WHEN 2 THEN 4 
            WHEN 3 THEN 5 
        END
WHERE id IN (1,2,3)

这句sql 的意思是,更新orderId 字段,如果id=1 则orderId 的值为3,如果id=2 则orderId 的值为4……
where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。




MyBatis 改写:

UPDATE tableName
         <trim prefix="set" suffixOverrides=",">

            <trim prefix="orderId1 = case" suffix="end,">
                <foreach collection="list" item="item" index="index">
                    <if test="item.orderId1 != null">
                        when orderId1 = #{item.orderId1 } then #{item.orderValue1}
                    </if>
                </foreach>
            </trim>


            <trim prefix="orderId2 = case" suffix="end,">
                <foreach collection="list" item="item" index="index">
                    <if test="item.orderId2 != null">
                        when orderId2 = #{item.orderId2 } then #{item.orderValue2}
                    </if>
                </foreach>
            </trim>

        </trim>


<WHERE> 
        <foreach collection="list" separator="or" item="item" index="index" >
            id = #{item.id}
        </foreach>
</WHERE> 
示例:    

    update cust_info
        <trim prefix="set" suffixOverrides=",">
            <trim prefix="is_social = case" suffix="end,">
                <foreach collection="list" item="item" index="index">
                    <if test="item.isSocial != null">
                        when cust_cert_number = #{item.custCertNumber} then #{item.isSocial}
                    </if>
                </foreach>
            </trim>
            
            <trim prefix="thirdpart_feedback_time = case" suffix="end,">
                <foreach collection="list" item="item" index="index">
                    <if test="item.thirdpartFeedbackTime != null">
                        when cust_cert_number = #{item.custCertNumber} then #{item.thirdpartFeedbackTime}
                    </if>
                </foreach>
            </trim>

            <trim prefix="is_thirdpart_feedback = case" suffix="end,">
                <foreach collection="list" item="item" index="index">
                    when cust_cert_number = #{item.custCertNumber} then 1
                </foreach>
            </trim>
        </trim>
        where
        <foreach collection="list" separator="or" item="item" index="index" >
            cust_cert_number = #{item.custCertNumber}
        </foreach>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis中实现批量更新MySQL有几种方式,包括使用case when、foreach成多条SQL、ON DUPLICATE KEY UPDATE和replace into。下面是这几种方式的介绍: 1. 使用case when: ```xml <update id="batchUpdate" parameterType="java.util.List"> UPDATE table_name SET column_name = CASE <foreach collection="list" item="item" separator=" "> WHEN id = #{item.id} THEN #{item.value} </foreach> END WHERE id IN <foreach collection="list" item="item" open="(" separator="," close=")"> #{item.id} </foreach> </update> ``` 2. foreach成多条SQL: ```xml <update id="batchUpdate" parameterType="java.util.List"> <foreach collection="list" item="item" separator=";"> UPDATE table_name SET column_name = #{item.value} WHERE id = #{item.id} </foreach> </update> ``` 3. ON DUPLICATE KEY UPDATE(仅适用于MySQL): ```xml <update id="batchUpdate" parameterType="java.util.List"> INSERT INTO table_name (id, column_name) VALUES <foreach collection="list" item="item" separator=","> (#{item.id}, #{item.value}) </foreach> ON DUPLICATE KEY UPDATE column_name = VALUES(column_name) </update> ``` 4. replace into(仅适用于MySQL): ```xml <update id="batchUpdate" parameterType="java.util.List"> REPLACE INTO table_name (id, column_name) VALUES <foreach collection="list" item="item" separator=","> (#{item.id}, #{item.value}) </foreach> </update> ``` 这些是在MyBatis中实现批量更新MySQL的几种方式。根据具体的需求和数据库类型,选择适合的方式进行批量更新操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值