解决mybatis批量更新(update foreach)失败的问题

 更新时间:2020年11月30日 10:44:28   作者:苏城码  
这篇文章主要介绍了解决mybatis批量更新(update foreach)失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如下所示:

 <!--批量更新报表 -->
 <update id="updateIssueByBatch" parameterType="java.util.List">
  <foreach collection="issueList" item="item" index="index" separator=";">
   update sys_issue
   <set>
    <if test="item.first != null and item.first != ''">first_class = #{item.first}, </if>
    <if test="item.second != null and item.second != ''">second_class = #{item.second}, </if>
    updated_time = now()
   </set>
   where id = #{item.Id} 
  </foreach>
 </update>

报错如下:

The error occurred while setting parameters

问题描述:

上网查询说是 配置mysql的时候没有开启批量插入,就查询了项目 是否 配置了 allowMultiQueries=true ,发现本地和线上都配置了该语句,问题没出在这。那么问题出在哪呢?后来发现是由于线上将 & 变成了 &amp; 造成的。

* 前后对比如下:*

修改前:

jdbc.url=jdbc:mysql://XXX/abc?useUnicode=true&zeroDateTimeBehavior=convertToNull&amp;allowMultiQueries=true

修改后:

jdbc.url=jdbc:mysql://XXX/abc?useUnicode=true&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true

补充知识:Mybatis 批量更新失败,单条成功

在项目开发过程中,结合业务场景,需要对某个表进行批量更新,完成所有的业务代码和Mybatis XML文件后,单元测试时,发现调用批量更新只有一条记录时,执行成功,传入多条记录,进行批量更新时,则提示失败,错误信息如下:

org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '......
### The error may involve .... 
### The error occurred while setting parameters ### SQL:

其中XML映射批量更新的结构如下:

<!-- 批量更新 -->
 <update id="batchUpdate" parameterType="java.util.List">
  <foreach collection="list" item="item" separator=";">
   update xxxxxx
   <set>
    <if test="item.xxx!= null">
     xxx= #{item.xxx,jdbcType=BIGINT},
    </if>    
    ......    
   </set>
   where id =#{item.id}
  </foreach>
 </update>

经过代码排查,以及批量update语句通过SQL工具直接执行均能成功,排除代码和sql语句问题,最后求助Google大神,发现使用mybatis进行批量插入与更新时,必须在配置连接url时指定allowMultiQueries=true

mysql.db.url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&&allowMultiQueries=true

经测试,完美解决此问题。

以上这篇解决mybatis批量更新(update foreach)失败的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java中为什么要谨慎使用Arrays.asList、ArrayList的subList

    java中为什么要谨慎使用Arrays.asList、ArrayList的subList

    这篇文章主要介绍了java中为什么要谨慎使用Arrays.asList、ArrayList的subList,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • idea2020中复制一个微服务实例的方法

    idea2020中复制一个微服务实例的方法

    这篇文章主要介绍了idea2020中复制一个微服务实例的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • spring多个事务管理器踩坑及解决

    spring多个事务管理器踩坑及解决

    这篇文章主要介绍了spring多个事务管理器踩坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 解决mac最新版intellij idea崩溃闪退crash的问题

    解决mac最新版intellij idea崩溃闪退crash的问题

    这篇文章主要介绍了解决mac最新版intellij idea崩溃闪退crash的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • 简单了解Spring中常用工具类

    简单了解Spring中常用工具类

    这篇文章主要介绍了简单了解Spring中常用工具类,非常全面,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • Java中不得不知的Collection接口与Iterator迭代器

    Java中不得不知的Collection接口与Iterator迭代器

    这篇文章主要介绍了Java中的Collection接口与Iterator迭代器,文中有详细的代码示例供大家参考,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-06-06
  • Java集合Map常见问题_动力节点Java学院整理

    Java集合Map常见问题_动力节点Java学院整理

    这篇文章主要为大家详细整理了Java集合Map常见问题,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Spring Boot 3 整合 MinIO 实现分布式文件存储的全过程

    Spring Boot 3 整合 MinIO 实现分布式文件存储的全过程

    本文介绍了如何使用SpringBoot3和MinIO实现分布式文件存储,通过MinIO的分布式对象存储系统,可以解决传统单机文件存储方案在面对大规模数据和高并发访问时的不足,文章详细讲解了MinIO的安装、配置和使用,感兴趣的朋友一起看看吧
    2025-03-03
  • 浅谈Maven resrouce下filtering作用

    浅谈Maven resrouce下filtering作用

    Filtering是Maven Resources Plugin的一个功能,本文主要介绍了浅谈Maven resrouce下filtering作用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • 图文详解java反射机制及常用应用场景

    图文详解java反射机制及常用应用场景

    这篇文章主要为大家介绍了图文详解java反射机制及常用应用场景,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03

最新评论