2019独角兽企业重金招聘Python工程师标准>>>

Mybatis之批量更新操作

更新单条记录

1

UPDATE course SET name 'course1' WHERE id = 'id1';

更新多条记录的同一个字段为同一个值

1

UPDATE course SET name 'course1' WHERE id in ('id1''id2', 'id3);

更新多条记录为多个字段为不同的值

比较普通的写法,是通过循环,依次执行update语句。

Mybatis写法如下:

1

2

3

4

5

6

7

8

9

<update id="updateBatch"  parameterType="java.util.List">  

    <foreach collection="list" item="item" index="index" open="" close="" separator=";">

        update course

        <set>

            name=${item.name}

        </set>

        where id = ${item.id}

    </foreach>      

</update>

一条记录update一次,性能比较差,容易造成阻塞。

MySQL没有提供直接的方法来实现批量更新,但可以使用case when语法来实现这个功能。

1

2

3

4

5

6

7

8

9

10

11

12

UPDATE course

    SET name CASE id 

        WHEN THEN 'name1'

        WHEN THEN 'name2'

        WHEN THEN 'name3'

    END

    title = CASE id 

        WHEN THEN 'New Title 1'

        WHEN THEN 'New Title 2'

        WHEN THEN 'New Title 3'

    END

WHERE id IN (1,2,3)

这条sql的意思是,如果id为1,则name的值为name1,title的值为New Title1;依此类推。

在Mybatis中的配置则如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

<update id="updateBatch" parameterType="list">

            update course

            <trim prefix="set" suffixOverrides=",">

             <trim prefix="peopleId =case" suffix="end,">

                 <foreach collection="list" item="i" index="index">

                         <if test="i.peopleId!=null">

                          when id=#{i.id} then #{i.peopleId}

                         </if>

                 </foreach>

              </trim>

              <trim prefix=" roadgridid =case" suffix="end,">

                 <foreach collection="list" item="i" index="index">

                         <if test="i.roadgridid!=null">

                          when id=#{i.id} then #{i.roadgridid}

                         </if>

                 </foreach>

              </trim>

             

              <trim prefix="type =case" suffix="end," >

                 <foreach collection="list" item="i" index="index">

                         <if test="i.type!=null">

                          when id=#{i.id} then #{i.type}

                         </if>

                 </foreach>

              </trim>

       <trim prefix="unitsid =case" suffix="end," >

                  <foreach collection="list" item="i" index="index">

                          <if test="i.unitsid!=null">

                           when id=#{i.id} then #{i.unitsid}

                          </if>

                  </foreach>

           </trim>

             </trim>

            where

            <foreach collection="list" separator="or" item="i" index="index" >

              id=#{i.id}

          </foreach>

</update>

转载于:https://my.oschina.net/u/2458549/blog/1021765

Mybatis之批量更新操作相关推荐

  1. mybatis mysql 批量更新_mysql批量update更新,mybatis中批量更新操作

    在日常开发中,有时候会遇到批量更新操作,这时候最普通的写法就是循环遍历,然后一条一条地进行update操作.但是不管是在服务端进行遍历,还是在sql代码中进行遍历,都很耗费资源,而且性能比较差,容易造 ...

  2. Mybatis的批量更新 bug

    2019独角兽企业重金招聘Python工程师标准>>> Mybatis的批量更新 bug 博客分类: mybatis 异常 Mybatis的批量更新       Mybatis的批量 ...

  3. Mybatis之批量更新数据(批量update)

    前言 当我们使用mybatis的时候,可能经常会碰到一批数据的批量更新问题,因为如果一条数据一更新,那每一条数据就需要涉及到一次数据库的操作,包括网络IO以及磁盘IO,可想而知,这个效率是非常低下的. ...

  4. SpringBoot+Mybatis+Druid批量更新 multi-statement not allow异常

    SpringBoot+Mybatis+Druid批量更新 multi-statement not allow异常 参考文章: (1)SpringBoot+Mybatis+Druid批量更新 multi ...

  5. 扩展tk.mybatis的批量更新的功能

    tk.mybatis没有带批量更新的功能,批量更新却是经常使用的,所以需要自己实现. 批量更新网上主要有2种方式:case when方式.foreach方式 但是foreachzhe这种方式效率非常低 ...

  6. JAVA怎么批量更新mysql_java 关于批量更新操作的实现

    批量更新操作 批量更新逻辑: 底层真正的批量更新(一次请求发送批量更新语句) 底层循环发送语句(假批量更新)-本质上就是一条一条更新 批量更新逻辑判断 JdbcTemplate JdbcUtils.s ...

  7. JAVA怎么批量更新mysql_java 批量添加、批量更新 操作数据库

    (1)三种插入操作的方法 1.1 利用for循环的批量插入 示例xml insert into test_user (u_name,create_date) value (#{userName},SY ...

  8. mybatis中批量更新

    一.更新多条数据,每条数据都不一样 背景描述:通常如果需要一次更新多条数据有两个方式,(1)在业务代码中循环遍历逐条更新.(2)一次性更新所有数据(更准确的说是一条sql语句来更新所有数据,逐条更新的 ...

  9. mybatis plus 批量更新数据_Mybatis 多字段组合唯一 并批量添加不重复数据

    前言 现在,普遍的关系型数据库开发都离不开 mybatis 这个优秀的持久层框架.而在普遍的业务场景中,也时常会有短时间内高频次的增删操作.这样短时间内高频次的操作,通常有两种实现方案,第一种是比较常 ...

最新文章

  1. 数据类型转换、==和===的判断
  2. 静态链接库、动态链接库和动态加载库
  3. 规范的.net 事件原理
  4. 老码农吐血建议:2020年,低于1w的程序员要注意了...
  5. 『JavaScript』利用Javascript获取IP地址内容方法
  6. 华为张顺茂:华为工业互联网平台FusionPlant助力国家电网打造泛在电力物联网
  7. lshw linux_Linux lshw命令–获取Linux硬件信息
  8. 关于显式量化和隐式量化的英文对照
  9. 如何在Vue中使用websocket?
  10. 数据帮助类(DataHelper)
  11. 解决OptiSystem安装、使用过程中遇到的问题
  12. uniapp中使用moment.js日期插件
  13. 制作浏览器javascript书签
  14. Win7 C盘瘦身 微信文件夹太大WeChat Files
  15. dubbo注册服务IP解析异常及IP解析源码分析
  16. python 制作电子书的软件_电子书制作软件下载-电子书制作软件工具箱下载v1.2 绿色版-西西软件下载...
  17. 小菜鸟之oracle数据字典
  18. Linux内核系统论文写作虚拟机方案
  19. Ebox还没到,可怎么办呢
  20. 线性表La和线性表Lb合并

热门文章

  1. 经典面试题:计算积水的横截面积
  2. 用window.open时能否通过post方式传输数据?
  3. SqlServer2005复制分类
  4. 用JavaScript写Session的两种方法
  5. ProcessDialogKey 方法实现回车自动换行
  6. ssh无法登录,提示Connection closing...Socket close.
  7. Android通用简洁的下载器
  8. software RAID0+cryptsetup磁盘加密
  9. Unity -- 材质-Material和预设体-Prefabs
  10. Js中的window.parent ,window.top,window.self 详解