这个方法看起来比上一篇博客 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>