today a question let me happy(抓狂)

头儿分了一个小任务,让修改循环调用dao层的那些不啦不啦不啦,鉴于之前写过批量更新的玩意,so 很快代码就修改完了,but 测的时候发现总是报错,很诡异,mmp 万分不解,以前就是这么写的,为嘛在这个项目就GG了?

后来还是广大人民群众给我指了条明道。OK,let us see

方法一:

<update id="updateByPrimaryKeyBatch" parameterType="java.util.Map">
<foreach collection="infos" item="item" >
update ${t_sr_process_detail}
<set>
<if test="item.tenantId != null and item.tenantId != ''">
TENANT_ID = #{item.tenantId,jdbcType=VARCHAR},
</if>
<if test="item.lgId != null">
LG_ID = #{item.lgId,jdbcType=BIGINT},
</if>
<if test="item.routeLgId != null">
ROUTE_LG_ID = #{item.routeLgId,jdbcType=BIGINT},
</if>
.....
</set>
where DSPS_PROC_ID = #{item.dspsProcId,jdbcType=BIGINT};
</foreach>
</update>
这就是我最先想到的,直接循环,构造出多条update语句 但是,很不幸的是 mysql默认不支持这种写法,其实它是不支持多条以‘;’分割的sql
解决方式:在jdbcURL配置追加:allowMultiQueries=true
方法二:

<update id="updateByPrimaryKeyBatch" parameterType="java.util.Map">
  update ${t_sr_process_detail}
    <trim prefix="set" suffixOverrides=",">
      <trim prefix="TENANT_ID =case" suffix="end,">
        <foreach collection="infos" item="item">
          <if test="item.tenantId !=null and item.tenantId != ''">
            when DSPS_PROC_ID=#{item.dspsProcId} then #{item.tenantId,jdbcType=VARCHAR}
          </if>
        </foreach>
      </trim>
    <trim prefix="LG_ID =case" suffix="end,">
      <foreach collection="infos" item="item">
        <if test="item.lgId != null">
          when DSPS_PROC_ID=#{item.dspsProcId} then #{item.lgId,jdbcType=BIGINT}
        </if>
      </foreach>
    </trim>
    <trim prefix="ROUTE_LG_ID =case" suffix="end,">
      <foreach collection="infos" item="item">
        <if test="item.routeLgId != null">
          when DSPS_PROC_ID=#{item.dspsProcId} then #{item.routeLgId,jdbcType=BIGINT}
        </if>
      </foreach>
    </trim>
    <trim prefix="WRKFM_ID =case" suffix="end,">
      <foreach collection="infos" item="item">
        <if test="item.wrkfmId != null">
          when DSPS_PROC_ID=#{item.dspsProcId} then #{item.wrkfmId,jdbcType=BIGINT}
        </if>
      </foreach>
    </trim>
    .....
  </trim>
  where DSPS_PROC_ID in
    <foreach collection="infos" item="item" separator="," open="(" close=")">
      #{item.dspsProcId,jdbcType=BIGINT}
    </foreach>
</update>

方法二据说效率高,其实不然,经过测试,发现方法二的速度明显慢与方法一,因为参数太多,使用case when 则每个参数都会循环,so we checked the first method .

 

mysql批量update的两种方法的更多相关文章

  1. c#mysql批量更新的两种方法

    总体而言update 更新上传速度还是慢. 1:  简单的insert  速度稍稍比MySqlDataAdapter慢一点 配合dapper 配置文件 <?xml version="1 ...

  2. mybatis 根据id批量删除的两种方法

    原文:https://blog.csdn.net/qq_40010745/article/details/81032218 mybatis 根据id批量删除的两种方法   第一种,直接传递给mappe ...

  3. mysql批量更新的两种方式效率试验<二>

    Mysql两种批量更新的对比 简介: mysql搭载mybits框架批量更新有两种方式,一种是在xml中循环整个update语句,中间以‘:’隔开,还有一种是使用case when 变相实现批量更新, ...

  4. mybatis学习之路----批量更新数据两种方法效率对比

    原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...

  5. mysql 批量更新的四种方法

    批量更新的方法: 1 ) 逐条更新 代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新 ...

  6. 【ADO.NET-中级】百万级数据的批量插入的两种方法测试

    在SQL Server 中插入一条数据使用Insert语句,但是如果想要批量插入一堆数据的话,循环使用Insert不仅效率低,而且会导致SQL一系统性能问题.下面介绍SQL Server支持的两种批量 ...

  7. mysql 清空表的两种方法

    一.Delete DELETE FROM `table`; 二.Truncate TRUNCATE `table`; 第一种方法其实就是去掉where条件,没有了条件,也就是删除掉表里面的所有记录了: ...

  8. MySQL 创建数据库的两种方法

    使用 mysqladmin 创建数据库 使用普通用户,你可能需要特定的权限来创建或者删除 MySQL 数据库. 所以我们这边使用root用户登录,root用户拥有最高权限,可以使用 mysql mys ...

  9. VIM 批量注释的两种方法 (转)

    方法一 ctrl+v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I(shift+i),再插入注释符,比如"//",再按Esc,就会全部注释了 批 ...

随机推荐

  1. Glide 4.0.0 下之加载本地缓存的图片

    在网上搜了下,无意中发现RequestOptions还有个方法: onlyRetrieveFromCache 用了下是OK的 try { File imageFile = Glide.with(con ...

  2. 自动化运维之PSSH

    1.PSSH简介 PSSH提供OpenSSH和相关工具的并行版本.包括pssh,pscp,prsync,pnuke和pslurp.该项目包括psshlib,可以在自定义应用程序中使用. pssh是py ...

  3. [Python设计模式] 第25章 联合国维护世界和平——中介者模式

    github地址:https://github.com/cheesezh/python_design_patterns 题目背景 联合国在世界上就是中介者的角色,各国之间的关系复杂,类似不同的对象和对 ...

  4. yarn 切换 设置 镜像 源

    1.查看一下当前源 yarn config get registry 2.切换为淘宝源 yarn config set registry https://registry.npm.taobao.org ...

  5. python pip 安装包报 编码问题

    好久不玩 TF 了, 今天尝试了一个案例,发现要安装module , 就搞了一下, 发现要先安装 base , 安装过程有遇到好多问题, 就写写, 将其中解决过程记录下来. 1. 保存,编码问题 Un ...

  6. c#异常重试机制

    有时候我们碰到程序异常了,想让程序继续重新执行,进行重试,这时候就需要有一个合适的方法来进行操作: 自己写代码控制太麻烦了,也容易出错.这时候当然是站在巨人的肩膀上, https://github.c ...

  7. CentOS 6.5 x64相关安全,优化配置

    一.安全 1.修改密码长度: [root@CentOS64 ~]# vi /etc/login.defs PASS_MAX_DAYS 99999   //用户的密密码最长使用天数 PASS_MIN_D ...

  8. hive set 常用参数汇总

    1. set hive.auto.convert.join = true; mapJoin的主要意思就是,当链接的两个表是一个比较小的表和一个特别大的表的时候,我们把比较小的table直接放到内存中去 ...

  9. Nginx SSL 结合Tomcat 重定向URL变成HTTP的问题

    http://www.siven.net/posts/d925bb5d.html *********************************************** 问题描述 由于要配置服 ...

  10. struts与servlet共存

    <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2 ...