mybatis批量插入数据报错?
这是为什么呢?难道不能只插入一个字段的数据?
回答:
应该这样使用
<foreach collection="list" item="item" separator="," open="(" close=")" > #{item.db}
</foreach>
foreach
标签的本质是循环拼接,你之前用法拼接就会成为 (db),(db)
这样的结果。
更新
下次请在问题中写清楚需求,一句 mybatis,一张图,虽然信息都在图里,但是重点信息被忽略。
Teradata 不支持这样使用。
应当改成多请求语句(MSR)
改法一,直接生成多条 insert 语句:
<insert id="insertTest" parameterType="list"> <foreach collection="list" item="item" separator=";">
insert into pd_test.cfg_sync_exclude_databases (db) values (#{item.db})
</foreach>
</insert>
改法二,一条 insert 语句,value 通过 union all
连接(未经验证,根据详见中回答的评论,会出现语法错误):
<insert id="insertTest" parameterType="list"> INSERT INTO pd_test.cfg_sync_exclude_databases(db)
WITH dual as (SELECT 1 as x)
<foreach collection="list" item="item" separator="UNION ALL">
SELECT #{item.db} as db FROM dual
</foreach>
</insert>
上面写法未经测试,可能有些小问题,但是思路是正确的。
详见
回答:
有可能是teradata数据库不支持这种批量插入的写法吧,insert table values (),(),()
以上是 mybatis批量插入数据报错? 的全部内容, 来源链接: utcz.com/p/944716.html