首页 > 数据库技术 > 详细

mybatis一次执行多条sql:allowMultiQueries=true

时间:2021-04-30 10:00:55      阅读:22      评论:0      收藏:0      [点我收藏+]

数据库版本: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.修改后,程序执行没有出现异常

 

mybatis一次执行多条sql:allowMultiQueries=true

原文:https://www.cnblogs.com/chuwu/p/14720048.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!