mybatis怎么批量修改数据(mybatis,开发技术)

时间:2024-05-08 05:59:55 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

批量修改主要有两种方式

第一种

可以通过for循环一条一条修改数据,这样会影响效率,因此我不推荐,所以在这里我也不多说。

第二种

通过修改mybatis中mapper.xml文件,如下:

<updateid="updateRoleMenus"parameterType="java.util.List"><foreachcollection="list"item="item"index="index"open=""close=""separator=";">updateTB_ROLE_MENU<set>FID=#{item.fid}</set>whereROLEID=#{item.roleid}</foreach></update>

mysql及mybatis批量更新数据update

mysql批量更新update

使用case when语句,数据表如下:

mybatis怎么批量修改数据

case1:

其中age为非空字段。sql如下

updatetest1setage=casewhenid=2then1whenid=3then2endwhereidin(2,3,4)

对id为2,3,4的设置age字段,id为2的设置为1,3的设置为2,结果为:

Column &lsquo;age&rsquo; cannot be null.

原因是由于id=4没有被上面的when匹配到,因此会被默认设为空null。即未被匹配到的记录并不会保持原来的数值,而是会被设置为null。

case2:

如果想设默认值,可写为:

updatetest1setage=casewhenid=2then1whenid=3then2else30endwhereidin(2,3,4)

结果是

mybatis怎么批量修改数据

可见id=4的设为了30,也就是通过else default_value可以对未被匹配到的行设置默认值。

case3:

如果想对未匹配到的行设置未原来的值,则可写为:

updatetest1setage=casewhenid=2then1whenid=3then2whenid=4thentest1.ageendwhereidin(2,3,4)

这样就可以通过test1.age来使id=4的行保持原值。在mybatis中可看到这种写法的用处。

mybatis实现批量更新update

对应上面的各种case,来写xml。

通常在写代码的时候,有时候不更新的字段就不会设置到对象里,比如Person对象分别有id,name,age三个属性对应数据库的三个字段,如果不想更新id=4的age时,就通常不设置age的值,也就是age=null,这样在case1里,就会被误设为null,详细见如下代码。

case1:

updatetest1<set> <trimprefix="age=case"suffix="end,"> <foreachcollection="list"item="item"index="index"> <iftest="item.age!=null"> whenid=#{item.id}then#{item.age} </if> </foreach> </trim> <trimprefix="name=case"suffix="end,"> <foreachcollection="list"item="item"index="index"> whenid=#{item.id}then#{item.name} </foreach> </trim></set>whereidin<foreachcollection="list"item="item"index="index"separator=","open="("close=")"> #{item.id}</foreach>

当传入的list中person对象有三个,分别对应id=2,3,4,若不想更新4的age,而只想更新4的姓名,则id=4的person对象age就会被设为null,这样传入该sql时,id=4的数据不会被when匹配,而又没有设置默认值,则原数据会被删除并设为null。

case2:

updatetest1<set> <trimprefix="age=case"suffix="end,"> <foreachcollection="list"item="item"index="index"> <iftest="item.age!=null"> whenid=#{item.id}then#{item.age} </if> </foreach> else30 </trim> <trimprefix="name=case"suffix="end,"> <foreachcollection="list"item="item"index="index"> whenid=#{item.id}then#{item.name} </foreach> </trim></set>whereidin<foreachcollection="list"item="item"index="index"separator=","open="("close=")"> #{item.id}</foreach>

该代码由于设置了else 30,因此会id=4的数据在不设置age的情况下会被更新为30。

case3:

updatetest1<set> <trimprefix="age=case"suffix="end,"> <foreachcollection="list"item="item"index="index"> <iftest="item.age!=null"> whenid=#{item.id}then#{item.age} </if> <iftest="item.age==null"> whenid=#{item.id}thentest1.age </if> </foreach> </trim> <trimprefix="name=case"suffix="end,"> <foreachcollection="list"item="item"index="index"> whenid=#{item.id}then#{item.name} </foreach> </trim></set>whereidin<foreachcollection="list"item="item"index="index"separator=","open="("close=")"> #{item.id}</foreach>

通过if标签,若传入的属性为null,则保持数据库原值。

补充:

更新多条数据同一字段为同一值:

UPDATEtest1SETage=24WHEREidin(2,3,4);
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:mybatis怎么批量修改数据的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:C++Smart Pointer智能指针怎么用下一篇:

6 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18