需求:
前端传入List集合对象,实现批量修改。

现实例子:

在用户表中,有字段id,name,classroom,录数据的时候,classroom是空的,只录了id和name信息,现在通过导入id和classroom的excel表格,批量修改学生的classroom值。

思路:

方法一:在service层对List集合进行for循环,每一条记录调用一次MySQL数据库。但是这样对于数据量大的情况下会大大消耗连接数据库的性能。

方法二:在MyBatis的xml文件中使用循环,每条语句用" ;"号隔开,使用事务监控语句执行的情况。但这样会直接报错,因为MyBatis默认不支持批量update语句的,要在连接JDBC的连接信息中加入一下字段:&allowMultiQueries=true。

方法三:使用case函数,将数据同时执行可以解决1的问题,本案例使用这种方法。

case函数语法

update tab_student setclassroom = case idwhen 1 then "one"when 2 then "tow"when 3 then "three"end
where id in (1,2,3)

解释:

通过id值修改classroom值,
当id=1时classroom=one;
当id=2时classroom=tow;
当id=3时classroom=three;

通常id和classroom都是用循环得出具体值

实体类:

public class Student{@ApiModelProperty(name="id",value="id")private Long id;@ApiModelProperty(name="name",value="名称")private String name;@ApiModelProperty(name="classroom",value="班级")private String classroom;

Mapper层:

Integer importInfo(@Param("students")List<Student> students,@Param("classroom")String classroom);

Mapper.xml文件:

<update id="importInfo">update tab_student set<foreach collection="students" item="student" open="classroom= case id" close="end,">when #{student.id} then #{student.classroom}</foreach>where id in<foreach collection="students" item="student" open="(" close=")" separator=",">#{student.id}</foreach></update>

用过MyBatis.log查看语句执行情况。

MyBatis实现批量修改的三种办法相关推荐

  1. linux下批量替换文件内容的三种办法

    http://www.51testing.com/html/93/316693-815340.html 程序开发中,可能你会经常遇到批量替换文件内容的情况,如果你使用的是linux,那么恭喜你,你可以 ...

  2. mybatis批量更新数据三种方法效率对比

    探讨批量更新数据三种写法的效率问题. 实现方式有三种, 1> 用for循环通过循环传过来的参数集合,循环出N条sql,需要在db链接url后面带一个参数  &allowMultiQuer ...

  3. mybatis批量更新数据三种方法

    具体的可以参考下面链接: ​​​​​​mybatis批量更新数据三种方法效率对比_PreciousLife的博客-CSDN博客_mybatis 批量更新 此处说明下,若是使用for循环遍历方式,来生成 ...

  4. 树莓派上开热点(AP)的三种办法实践结果V2

    树莓派上开热点(AP)的三种办法实践结果 date: 2021-08-02 lastmod: 2021-09-19 背景 UC2 项目中树莓派大脑和子模块有两种方式连接方式,一种是采用 I2C 总线通 ...

  5. C# 读取网页源码的三种办法WebClient、WebRequest、HttpWebRequest

    直接看这三种办法的源码吧, using System; using System.IO; using System.Net;namespace ReadHtml{ class ReadHtml{ st ...

  6. c#中程序以管理员身份运行的三种办法

    三种办法: 一.设置程序本身的属性:勾选"以管理员身份运行此程序",必要时设置"更改所有用户设置-以管理员身份运行此程序",当然这种办法是被动的,也不是最实际的 ...

  7. MyBatis实现模糊查询的三种方式

    MyBatis实现模糊查询的三种方式 准备 模糊查询 方式一 方式二 方式三 由于#{}是占位符本身,自带单引号,所以在模糊查询时需要一些技巧. 准备 数据库表 bean 模糊查询 以查询出所有用户名 ...

  8. linux文件损坏怎么修复工具,在Ubuntu操作系统下修复损坏程序包的三种办法

    如果在 Ubuntu 操作系统下出现损坏的程序包,通常有三种办法可以修复它们,分别是:使用 apt 或 apt-get.使用 dpkg 及解除 dpkg 锁,下面为你一一介绍. 背景 apt 是 Ub ...

  9. 用malloc开辟二维数组的三种办法

    第一种办法:用指针数组:首先看一下原理图(以开辟整型二维数组三行四列为例,以下都是): 先看一下用malloc申请一维数组: int *p=(int *)malloc(10*sizeof(int)); ...

最新文章

  1. 浅谈自然语言处理技术在自动化的应用
  2. 第十一篇:Discourse 话语/论述
  3. python bs4 find_all_BeautifulSoup中的find,find_all
  4. Guice系列之用户指南(五)
  5. 蓝牙协议分析(6)_BLE地址类型(蜗窝科技)
  6. 局域网上传文件到服务器很慢,win10局域网内传文件很慢怎么办_win10局域网内文件传输很慢如何处理-win7之家...
  7. COGS-363-土地购买-斜率优化
  8. PTA L2-001 紧急救援 (点带权最短路)
  9. django debug=false后静态文件丢失_python框架Django实战商城项目之工程搭建
  10. 枚举ENUM的tostring() valueof()name()和values()用法
  11. Codeforces Round #361(div 2)
  12. 二分答案——数列分段 Section II(洛谷 P1182)
  13. 双系统装完只能u盘启动_U盘启动盘如何安装Win7+Win8双系统史上最详细教程
  14. 计算机如何设置多用户,windows7远程桌面多用户连接怎么设置_win7远程桌面如何设置多人登录-win7之家...
  15. Python根据拼音对中文排序
  16. Spring源码分析总结(二)-Spring AOP 解析aop:aspectj-autoproxy
  17. GUI(Graphic User Interface) 图形用户界面
  18. nimg 文件服务器 部署,RHEL6.5 部署DNS服务器
  19. java微信小程序内容安全 - 检测文本是否含有违法违规内容
  20. 深度linux u盘启动安装教程,带你了解国产操作系统“深度(deepin)”之制作U盘启动教程...

热门文章

  1. Chief Architect Premier X10 for Mac v20.2.3.3 破解版 专业家居设计软件
  2. idfa安卓_uni-app如何获取苹果手机的IDFA及安卓手机的IEMI
  3. amazeui.css
  4. linker command failed with exit code 1 (use -vto see invocation)
  5. 免安装版本python的pip安装
  6. 【Aries - Unity入门】第一章 行业与引擎的了解
  7. 《SCDA:Adapting Object Detectors via Selective Cross-Domain Alignment》论文笔记
  8. 帝国CMS资讯自适应HTML5响应式源码,简单而不简约自适应HTML5响应式文章新闻帝国CMS网站模板整站手机...
  9. 网站 服务器拒绝访问,缓存服务器拒绝访问 了解如何修复
  10. 文件管理服务器win7,实测:Win8文件管理器比Win7的强在哪?