Mybatis使用foreach批量插入Oracle提示命令未正確結(jié)束方式
錯(cuò)誤代碼
<insert id="multiInsertTest" parameterType="java.util.List">
INSERT INTO TEST_NWD (ID, NUM)
VALUES
<foreach collection ="testList" item="test" separator ="UNION ALL">
(#{test.ID}, #{test.NUM})
</foreach >
</insert>
這樣會(huì)執(zhí)行:
INSERT INTO TEST_NWD (ID, NUM) VALUES (?,?) ,(?,?)
Oracle是不支持這種語法的,會(huì)提示SQL命令未正確結(jié)束,MySQL是支持的。
正確代碼
<insert id="multiInsertTest" parameterType="java.util.List">
INSERT INTO TEST_NWD (ID, NUM)
<foreach collection ="testList" item="test" separator ="UNION ALL">
SELECT
#{test.ID}, #{test.NUM}
FROM dual
</foreach >
</insert>
1、 將VALUES去掉
2、 foreach標(biāo)簽內(nèi)的()去掉,使用select … from dual
3、 separator =","改為separator=“UNION ALL”
foreach標(biāo)簽的屬性介紹
foreach元素的屬性主要有item,index,collection,open,separator,close。
- item:集合中元素迭代時(shí)的別名,該參數(shù)為必選。
- index:在list和數(shù)組中,index是元素的序號(hào),在map中,index是元素的key,該參數(shù)可選
- open:foreach代碼的開始符號(hào),一般是(和close=")“合用。常用在in(),values()時(shí)。該參數(shù)可選
- separator:元素之間的分隔符,例如在in()的時(shí)候,separator=”,“會(huì)自動(dòng)在元素中間用“,“隔開,避免手動(dòng)輸入逗號(hào)導(dǎo)致sql錯(cuò)誤,如in(1,2,)這樣。該參數(shù)可選。
- close: foreach代碼的關(guān)閉符號(hào),一般是)和open=”("合用。常用在in(),values()時(shí)。該參數(shù)可選。
- collection: 要做foreach的對(duì)象,作為入?yún)r(shí),List對(duì)象默認(rèn)用"list"代替作為鍵,數(shù)組對(duì)象有"array"代替作為鍵,Map對(duì)象沒有默認(rèn)的鍵。當(dāng)然在作為入?yún)r(shí)可以使用@Param(“keyName”)來設(shè)置鍵,設(shè)置keyName后,list,array將會(huì)失效。 除了入?yún)⑦@種情況外,還有一種作為參數(shù)對(duì)象的某個(gè)字段的時(shí)候。舉個(gè)例子:如果User有屬性List ids。入?yún)⑹荱ser對(duì)象,那么這個(gè)collection = “ids”.如果User有屬性Ids ids;其中Ids是個(gè)對(duì)象,Ids有個(gè)屬性List id;入?yún)⑹荱ser對(duì)象,那么collection = “ids.id”
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot應(yīng)用程序啟動(dòng)監(jiān)聽功能的常見方法
應(yīng)用啟動(dòng)監(jiān)聽在?Spring?Boot?和其他框架中扮演著重要的角色,它們的主要作用是在應(yīng)用啟動(dòng)或關(guān)閉時(shí)觸發(fā)特定的操作或任務(wù),本文給大家介紹了SpringBoot應(yīng)用程序啟動(dòng)監(jiān)聽功能的常見方法,需要的朋友可以參考下2024-05-05
用Java實(shí)現(xiàn)小球碰壁反彈的簡(jiǎn)單實(shí)例(算法十分簡(jiǎn)單)
下面小編就為大家?guī)硪黄肑ava實(shí)現(xiàn)小球碰壁反彈的簡(jiǎn)單實(shí)例(算法十分簡(jiǎn)單)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08
Java簡(jiǎn)單實(shí)現(xiàn)動(dòng)態(tài)代理模式過程解析
這篇文章主要介紹了Java動(dòng)態(tài)代理模式簡(jiǎn)單案例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Springboot解決ajax+自定義headers的跨域請(qǐng)求問題
由于瀏覽器同源策略(同源策略,它是由Netscape提出的一個(gè)著名的安全策略,現(xiàn)在所有支持JavaScript 的瀏覽器都會(huì)使用這個(gè)策略。接下來通過本文給大家介紹Springboot如何優(yōu)雅的解決ajax+自定義headers的跨域請(qǐng)求 ,需要的朋友可以參考下2019-05-05
Spring中的@ConfigurationProperties詳解
這篇文章主要介紹了Spring中的@ConfigurationProperties詳解,ConfigurationProperties注解主要用于將外部配置文件配置的屬性填充到這個(gè)Spring Bean實(shí)例中,需要的朋友可以參考下2023-09-09
IntelliJ IDEA下載GitHub私有倉(cāng)庫到本地的方法(新版)
這篇文章主要介紹了IntelliJ IDEA下載GitHub私有倉(cāng)庫到本地(新版),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05

