文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mybatis怎么批量修改数据

2023-06-29 12:14

关注

这篇文章给大家分享的是有关mybatis怎么批量修改数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

批量修改主要有两种方式

第一种

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

第二种

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

<update id="updateRoleMenus" parameterType="java.util.List">       <foreach collection="list" item="item" index="index" open="" close="" separator=";">        update TB_ROLE_MENU            <set>           FID=#{item.fid}          </set>           where ROLEID = #{item.roleid}       </foreach>     </update>

mysql及mybatis批量更新数据update

mysql批量更新update

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

mybatis怎么批量修改数据

case1:

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

update test1set age=casewhen id=2 then 1when id =3 then 2endwhere id in (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:

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

update test1set age=casewhen id=2 then 1when id =3 then 2else 30endwhere id in (2,3,4)

结果是

mybatis怎么批量修改数据

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

case3:

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

update test1set age=casewhen id=2 then 1when id =3 then 2when id =4 then test1.ageendwhere id in (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:

update test1<set><trim prefix="age=case" suffix="end,"><foreach collection="list" item="item" index="index"><if test="item.age !=null">when id=#{item.id} then #{item.age}</if></foreach></trim><trim prefix="name=case" suffix="end,"><foreach collection="list" item="item" index="index">when id=#{item.id} then #{item.name}</foreach></trim></set>where id in<foreach collection="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:

update test1<set><trim prefix="age=case" suffix="end,"><foreach collection="list" item="item" index="index"><if test="item.age !=null">when id=#{item.id} then #{item.age}</if></foreach>else 30</trim><trim prefix="name=case" suffix="end,"><foreach collection="list" item="item" index="index">when id=#{item.id} then #{item.name}</foreach></trim></set>where id in<foreach collection="list" item="item" index="index" separator="," open="(" close=")">#{item.id}</foreach>

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

case3:

update test1<set><trim prefix="age=case" suffix="end,"><foreach collection="list" item="item" index="index"><if test="item.age !=null">when id=#{item.id} then #{item.age}</if><if test="item.age ==null">when id=#{item.id} then test1.age</if></foreach></trim><trim prefix="name=case" suffix="end,"><foreach collection="list" item="item" index="index">when id=#{item.id} then #{item.name}</foreach></trim></set>where id in<foreach collection="list" item="item" index="index" separator="," open="(" close=")">#{item.id}</foreach>

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

补充:

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

UPDATE test1 SET age=24 WHERE id in(2,3,4);

感谢各位的阅读!关于“mybatis怎么批量修改数据”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯