這個方法看起來比上一篇博客 mybatis 批量Update(1) 好像更復雜,當初我第一次須要用到批量更新數據時,也是這麼感受的,而後就一直用前面那個,知道後來前面那種沒法知足個人需求了才被迫研究了這種,忽然發現這種簡單到使人髮指,只是賣相比前面那種難看了點數據庫
此方法是通過本人實踐過的,用於mybatis批量update算是最佳的了吧mybatis
下面看代碼吧spa
<update id="XX" parameterType="list"> update tableName set 你要修改的數據庫字段名稱 = CASE 參考的數據庫字段名 <foreach collection="list" index="i" item="it" separator=" "> WHEN #{參考字段參數,jdbcType=參數類型} THEN #{要修改字段的參數,jdbcType=參數類型} </foreach> END,<!--多個字段用[,]隔開 END必定不能丟哦--> 你要修改的數據庫字段名稱 = CASE 參考字段 <foreach collection="list" index="i" item="it" separator=" "> WHEN #{參考字段參數,jdbcType=參數類型} THEN #{要修改字段的參數,jdbcType=參數類型} </foreach> END<!--END必定不能丟哦--> WHERE 參考的數據庫字段名 IN <foreach collection="list" index="i" item="it" separator="," open="(" close=")"> #{參考字段參數,jdbcType=參數類型} </foreach> </update>
若是有參數意思不明白的能夠留言評論,我基本天天都會上來轉一圈開源中國會看到的.net
以下democode
好比有一張person表 裏面有三個字段 name sex age 而後有三條記錄 張三 男 23 李四 男 32 王五 女 33 如今要將張三改成女 李四改成 44歲 王五改成 男 入參用list容器裝person對象 <UPDATE id="update" parameterType="list"> update person set sex= case name <foreach collection="list" item="t" index="i" separator=" "> WHEN #{t.name,jdbcType=VARCHAR} THEN #{t.sex,jdbcType=VARCHAR} </foreach> END; age= case name <foreach collection="list" item="t" index="i" separator=" "> WHEN #{t.name,jdbcType=VARCHAR} THEN #{t.age,jdbcType=INTEGER} </foreach> END; WHERE name in <foreach collection="list" item="t" index="i" open="(" close=")" separator=","> #{t.name,jdbcType=VARCHAR} </foreach> </update>