mybatis批量更新數據SQL

Mybatis的XML寫法如下: 

<update id="updateList"  parameterType="java.util.List">  
    <foreach collection="list" item="item" index="index" open="" close="" separator=";">
        update tab
        <set>
            name=${item.name}
        </set>
        where id = ${item.id}
    </foreach>      
</update>

一條記錄update一次,性能比較差,容易造成阻塞。

MySQL沒有提供直接的方法來實現批量更新,但可以使用case when語法來實現這個功能。

 UPDATE tab
    SET name = CASE id 
        WHEN 1 THEN 'name1'
        WHEN 2 THEN 'name2'
        WHEN 3 THEN 'name3'
    END, 
    title = CASE id 
        WHEN 1 THEN 'New Title 1'
        WHEN 2 THEN 'New Title 2'
        WHEN 3 THEN 'New Title 3'
    END
WHERE id IN (1,2,3)

這條sql的意思是,如果id爲1,則name的值爲name1,title的值爲New Title1;依此類推。

所以在Mybatis中這麼寫

    update tab
        set  name = 
        <foreach collection="list" item="item" index="index"
                 separator=" " open="case" close="end,">
            when id = #{item.id} then #{item.name}
        </foreach>

        where id in
        <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
            #{item.id}
        </foreach>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章