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

回到顶部