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

  • 相关阅读:
    CodeForces 1059B
    CodeForces 714A
    浅析母函数
    CodeForces 816C 思维
    CodeForces 816B 前缀和
    CodeForces
    Java项目读取resources资源文件路径那点事
    原型模式
    一次给女朋友转账引发我对分布式事务的思考
    连续最大字段和问题
  • 原文地址:https://www.cnblogs.com/chuwu/p/14720048.html
Copyright © 2020-2023  润新知