批量操作
我们在使用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。在正式环境启动脚本中增加该内容,项目启动后批量插入功能正常使用。