zoukankan      html  css  js  c++  java
  • mybatis一次执行多条sql:allowMultiQueries=true

    数据库版本:5.7  springboot版本:2.1.3

    1.需求:页面上有一个列表,可以勾选列表的多条数据,按下禁用按钮,就把这些勾选数据设置为禁用。就是一个对多条数据修改状态的需求。

    于是让前端传入一个列表,[{"id":1,"status":0},{"id":2,"status":0}]这样的数据,然后在sql中进行foreach,如下图

    debug可以看到生成的执行sql为 update j_lamp_item lam set lam.`status` = 0 where lam.school_id = 3 and lam.lamp_item_id = 1;update j_lamp_item lam set lam.`status` = 0 where lam.school_id = 3 and lam.lamp_item_id = 2

    2.但是在程序中,报错了,以下是报错信息截图

     大概就是mysql版本不支持之类的报错

    于是把这条sql放入navicat去执行,update j_lamp_item lam set lam.`status` = 0 where lam.school_id = 3 and lam.lamp_item_id = 1;update j_lamp_item lam set lam.`status` = 0 where lam.school_id = 3 and lam.lamp_item_id = 2  执行结果正确,没有问题。于是日了狗了,相同的sql在navicat正常运行,在程序中执行异常

    3.多次怀疑mysql5.7版本后,将这条sql放入navicat并使用mysql8.0执行正常

    4.于是尝试直接把执行sql:<update id="updateStatus" >update j_lamp_item lam set lam.`status` = 0 where lam.school_id = 3 and lam.lamp_item_id = 1;update j_lamp_item lam set lam.`status` = 0 where lam.school_id = 3 and lam.lamp_item_id = 2</update>放在mapper.xml文件中执行,程序一样的异常

    5.是不是一次执行两条sql有问题?mapper.xml文件中直接改为<update id="updateStatus" >update j_lamp_item lam set lam.`status` = 0 where lam.school_id = 3 and lam.lamp_item_id = 1;</update>,执行成功,没有异常

    6.可以肯定是一次执行多条sql的问题,于是百度后(mybatis一次执行多条sql),得到要在连接中增加allowMultiQueries=true

    7.修改后连接后得到 jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai&zeroDateTimeBehavior=convertToNull

    8.修改后,程序执行没有出现异常

  • 相关阅读:
    MySQL性能优化
    性能测试结果分析
    TFS使用之代码管理
    新博开通,近期将推出系列博客之测试工具篇!
    绝对受用的TFS操作指南
    2008 &amp; 2005 TFS 安装心得及安装时遇到的问题!
    测试用例如何进行评审?
    cordova H5打包APK关键几点记录
    Silverlight+wcf 结合窗体验证演示
    两道js笔试题
  • 原文地址:https://www.cnblogs.com/chuwu/p/14720048.html
Copyright © 2011-2022 走看看