故事
今天下午公司技术分享,一个伙伴提到他踩过坑:mybatis批量插入时动态sql允许的最大参数数量是2100个。即下面代码中“#”的数量。
<insert id="batchInsert" parameterType="list">
insert into Adv_permeability values
<foreach collection="permeabilityList" separator="," item="permeability">
(#{permeability.areaId}, #{permeability.areaName}, #{permeability.flag})
</foreach>
</insert>
当时就有一个小伙伴不开心了,他明确表示自己曾经成功插入超过2100个参数,并当场拉出了代码证明之。由此猜测mybatis
批量插入的上限是按对象数量限制的,不是参数,双方争执不下,一片欢乐。
探究
mybatis
真的对动态 SQL 的 参数 或者 对象 数量设定了限制么?如果有那么原因何在?如果没有,那么为什么双方都那么确定呢?难道是 数据库 不同导致的?
本着最小投入的原则,笔者开始了测试。手头现有 SQLServer
和 Mysql
就测这两个吧。脚本使用上述的简单脚本。