項目中,為了提高效率和友善復原,不單單隻是在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>