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.修改后,程序执行没有出现异常

  • 相关阅读:
    less @import and extend及mixin详解
    Less的guards and argument matching
    LESS嵌套中的Mixins和classes
    bootstrap colorscheme以及theme自动生成
    C# Winform 获得下拉框 选中的值
    C# 后台按键 视频播放器 全屏后无法 触发
    C# 调用win32API 获取进程句柄 有毛用???
    C# 键盘钩子
    C# SqlParameter 使用
    C# 获得星期几
  • 原文地址:https://www.cnblogs.com/chuwu/p/14720048.html
Copyright © 2011-2022 走看看