解決Oracle+Mybatis批量插入報錯:SQL 命令未正確結束
Mybatis批量插入需要foreach元素。foreach元素有以下主要屬性:
(1)item:集合中每一個元素進行叠代時的別名。
(2)index:指定一個名字,用於表示在叠代過程中,每次叠代到的位置。
(3)collection:根據傳入的參數值確定。
(4)open:表示該語句以什麽開始。
(5)separator:表示在每次進行叠代之間以什麽符號作為分隔 符。
(6)close:表示以什麽結束。
首先,錯誤的xml配置文件如下:
<insert id="save" databaseId="oracle">
insert into "sys_user_role"
(
"user_id",
"role_id"
)values
<foreach collection="roleIdList" item="item" index="index" separator="," >
(
#{userId},
#{item}
)
</foreach>
</insert>
如果如上這樣寫就會報錯:SQL 命令未正確結束。
經過修改後正確的xml配置文件如下:
<insert id="save" databaseId="oracle">
insert into "sys_user_role"
(
"user_id",
"role_id"
)
<foreach collection="roleIdList" item="item" index="index" separator="UNION ALL" >
SELECT
#{userId},
#{item}
FROM dual
</foreach>
</insert>
根據上下配置文件,需要註意三個地方:
(1)需要取掉values
(2)separator屬性值改為UNION ALL。因為在oracle中用insert into xxx values (xxx,xxx),(xxx,xxx) 這種語法是通不過的
(3)foreach標簽中需要取掉括號,加入select ..from dual.
解決Oracle+Mybatis批量插入報錯:SQL 命令未正確結束