mybatis如何批量修改数据
目录
- 批量修改主要有两种方式
- 第一种
- 第二种
- mysql及mybatis批量更新数据update
- mysql批量更新update
- mybatis实现批量更新update
批量修改主要有两种方式
第一种
可以通过for循环一条一条修改数据,这样会影响效率,因此我不推荐,所以在这里我也不多说。
第二种
通过修改mybatis中mapper.xml文件,如下:
update TB_ROLE_MENUFID=#{item.fid}where ROLEID = #{item.roleid}
mysql及mybatis批量更新数据update
mysql批量更新update
使用case when语句,数据表如下:
文章图片
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 ‘age’ 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)
结果是
文章图片
可见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。
【mybatis如何批量修改数据】通常在写代码的时候,有时候不更新的字段就不会设置到对象里,比如Person对象分别有id,name,age三个属性对应数据库的三个字段,如果不想更新id=4的age时,就通常不设置age的值,也就是age=null,这样在case1里,就会被误设为null,详细见如下代码。
case1:
update test1when id=#{item.id} then #{item.age} where id in when id=#{item.id} then #{item.name} #{item.id}
当传入的list中person对象有三个,分别对应id=2,3,4,若不想更新4的age,而只想更新4的姓名,则id=4的person对象age就会被设为null,这样传入该sql时,id=4的数据不会被when匹配,而又没有设置默认值,则原数据会被删除并设为null。
case2:
update test1else 30 when id=#{item.id} then #{item.age} where id in when id=#{item.id} then #{item.name} #{item.id}
该代码由于设置了else 30,因此会id=4的数据在不设置age的情况下会被更新为30。
case3:
update test1when id=#{item.id} then #{item.age} when id=#{item.id} then test1.age where id in when id=#{item.id} then #{item.name} #{item.id}
通过if标签,若传入的属性为null,则保持数据库原值。
补充:
更新多条数据同一字段为同一值:
UPDATE test1 SET age=24 WHERE id in(2,3,4);
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
推荐阅读
- Mybatis|Mybatis resultType返回结果为null的问题排查方式
- mybatis使用Integer类型查询可能出现的问题
- ETL批量调度工具TASKCTL核心调度节点安装
- 如何写一份好的前端面试简历?
- 其它经验|研究生应如何合理管理时间
- ios快捷指令连接linux,如何利用 iOS 快捷指令自动化登录校园网
- ios|哔咔漫画iOS如何下载
- Linux操作系统|服务器如何部署并启动前后端分离(springboot+vue)的web项目
- 云原生时代,如何保证容器镜像安全()
- 程序员|作为一只Python爬虫(如何破解滑动验证码)