Mybatis批量操作的坑

mac2022-09-23  52

批量操作

我们在使用mybatis时会经常用到标签,再进行批量insert/update时,出于性能考虑我们往往以多调sql形式拼接sql语句:如下

<update ...> <foreach ... separator=";"> update ... --这里是更新的内容 </foreach> </update>

这种情况下,原本在测试环境下跑通的代码却无法在正式环境进行运行,但测试和正式的环境完全相同,由于项目时间紧张只能曲线救国,将拼接sql的语句放到代码中完成,或者insert语句用in(…)进行批量插入。

在完成项目功能之后,开始梳理遇到该问题的原因,了解到如果想在sql拼接时进行多条数据执行,必须在连接数据库时加&allowMultiQueries=true

jdbc:mysql://localhost:3306/platform?characterEncoding=UTF-8&allowMultiQueries=true

而数据库配置中确实已经有该配置,而测试与正式环境执行不同,我们将问题定位在了正式环境中的配置文件。 经过核对,正式环境的配置也相同,于是需要考虑正式环境不同之处。

由于该项目是搭建在Kubernetes上的springboot项目,检查了启动项目时的脚本发现,每次启动时会进行mysql连接的重新配置,这里没有加入&allowMultiQueries=true。在正式环境启动脚本中增加该内容,项目启动后批量插入功能正常使用。

最新回复(0)