天天看點

mybatis批量更新update的各種情況總結

項目中,為了提高效率和友善復原,不單單隻是在mvc的服務層設定復原切點,最好是能在sql裡面實作批量更新最好不過了。

mybatis作為強大的持久層架構,當然可以很好地支援批量更新。而且以下代碼相容oracle和mysql資料庫

一、不同的id更新相同值的幾個字段。

傳值是map類型,ids可以是list也可以是數組。

<update id="updatebatchSame" parameterType="java.util.Map" >
    UPDATE Table1 SET name = #{name},code=#{code} WHERE id IN
    <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
        #{item}
    </foreach>
</update>
           

二、多個不同的條件(id和bid)更新相同值的幾個字段。

傳值是map類型,ids是List,不同的條件在list元素對象裡。

<update id="updatebatchMore" parameterType="java.util.Map" >
    UPDATE Table1 SET name = #{name},code=#{code} WHERE 
    <foreach collection="ids" index="index" item="item" separator="or" >
        (id=#{item.id} and bid=#{item.bid})
    </foreach>
</update>
           

三、 不同的id更新不同值的幾個字段。

傳值是map類型,ids是List,所有的值都在List元素對象裡面。

<update id="updatebatchIdList" parameterType="java.util.Map" >
    UPDATE Table1 SET name = 
  <foreach collection="ids" index="index" item="item" open="case id" separator=" " close=" end">
        when #{item.id}  then #{item.name}
    </foreach>

,code= <foreach collection="ids" index="index" item="item" open="case id" separator=" " close=" end">
        when #{item.id} then #{item.code}
    </foreach>
   WHERE id IN
    <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
        #{item.id}
    </foreach>
</update>
           

四、 多個不同的條件(id和bid)更新不同值的幾個字段。

傳值是map類型,ids是List,所有的值都在List元素對象裡面。

<update id="updatebatchList" parameterType="java.util.Map" >
    UPDATE Table1 SET name = 
  <foreach collection="ids" index="index" item="item" open="case " separator=" " close=" end">
        when (id=#{item.id} and bid=#{item.bid}) then #{item.name}
    </foreach>

,code= <foreach collection="ids" index="index" item="item" open="case " separator=" " close=" end">
        when (id=#{item.id} and bid=#{item.bid}) then #{item.code}
    </foreach>
WHERE 
    <foreach collection="ids" index="index" item="item" separator="or" >
        (id=#{item.id} and bid=#{item.bid})
    </foreach>
</update>