mysql批量update更新,mybatis中批量更新操作


在日常開發中,有時候會遇到批量更新操作,這時候最普通的寫法就是循環遍歷,然后一條一條地進行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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM