漂流的老妖怪

导航

 

在日常开发中,有时候会遇到批量更新操作,这时候最普通的写法就是循环遍历,然后一条一条地进行update操作。但是不管是在服务端进行遍历,还是在sql代码中进行遍历,都很耗费资源,而且性能比较差,容易造成阻塞。

Mysql没有提供直接的方法来实现批量更新,但可以使用case when语法来实现这个功能。

Mysql中代码示例:

UPDATE tablename
    SET sort = CASE id 
        WHEN 1 THEN 'sort1'
        WHEN 2 THEN 'sort2'
        WHEN 3 THEN 'sort3'
    END, 
    updateuserid = CASE id 
        WHEN 1 THEN 'updateuserid1'
        WHEN 2 THEN 'updateuserid2'
        WHEN 3 THEN 'updateuserid3'
    END
WHERE id IN (1,2,3)

sql释义:

如果id为1,则sort的值为sort1,updateuserid的值为updateuserid1;

如果id为2,则sort的值为sort2,updateuserid的值为updateuserid2;

如果id为3,则sort的值为sort3,updateuserid的值为updateuserid3;以此类推。


 

Mybatis中代码示例:

<update id="updateBatch" parameterType="list">
        update t_mt_sm_dept
        <trim prefix="set" suffixOverrides=",">
            <trim prefix=" sort = case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="sort != '' and sort != null">
                        when id=#{i.id} then #{i.sort}
                    </if>
                </foreach>
            </trim>
            <trim prefix="updateuserid = case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="updateuserid != '' and updateuserid != null">
                        when id=#{i.id} then #{i.updateuserid}
                    </if>
                </foreach>
            </trim>
            <trim prefix="updateusername = case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="updateusername != '' and updateuserid != null">
                        when id=#{i.id} then #{i.updateusername}
                    </if>
                </foreach>
            </trim>
        </trim>
        where
        <foreach collection="list" separator="or" item="i" index="index">
            id = #{i.id}
        </foreach>
    </update>

java中代码:

   /**
     * 批量修改排序
     */
    int updateBatch(List<SmDept> smDeptList);

 

posted on 2019-04-10 14:30  漂流的老妖怪  阅读(3491)  评论(0编辑  收藏  举报