oracle+mybatis 使用動態(tài)Sql當(dāng)插入字段不確定的情況下實現(xiàn)批量insert
最近做項目遇到一個挺糾結(jié)的問題,由于業(yè)務(wù)的關(guān)系,DB的數(shù)據(jù)表無法確定,在使用過程中字段可能會增加,這樣在insert時給我造成了很大的困擾。
先來看一下最終我是怎么實現(xiàn)的:
<insert id="batchInsertLine" parameterType="HashMap"> <![CDATA[ INSERT INTO tg_fcst_lines(${lineColumn}) select result.*,sq_fcst_lines.nextval from( ]]> <foreach collection="lineList" item="item" index="index" separator="union all" > (select <foreach collection="item" index="key" item="_value" separator=","> #{_value} </foreach> from dual) </foreach> <![CDATA[) result]]> </insert>
由于數(shù)據(jù)表不確定,所以我無法確定我要insert的字段,由于是批量insert,確定value值也挺費勁。
我傳給mybatis的參數(shù)是一個map:
Map insertMap = new HashMap(); insertMap.put("lineColumn",lineColumn); insertMap.put("lineList", lineList);
lineColumn是一個字符串,lineList是一個list:
List<Map> lineList = new ArrayList();
lineList里存放的是map,map的鍵對應(yīng)數(shù)據(jù)表的字段,值是你要insert的值,這樣就可以通過foreach取出list的值作為insert語句的value,但由于map是無序的,存放的順序和
遍歷時取值的順序不一定一致,所以為了確保insert字段和值可以一一對應(yīng),可以通過遍歷一次map來取出key拼接一個字符串作為insert的字段
String lineColumn = ""; //拼接的SQL,作為insert語句的一部分 [java] view plaincopy Map<String,String> lineMap = lineList.get(0); for (String key : lineMap.keySet()) { lineColumn +=key+","; } lineColumn +="LINE_ID";
這里的line)id是一個自增的字段,在語句中直接寫序列會報錯,所以先遍歷list將取出的值作為result,在取出result的所有值,連同序列一起作為insert的值。
在取值的時候使用兩個foreace嵌套來實現(xiàn),外層的foreach遍歷list,里層的foreach遍歷map。
以上內(nèi)容是本文給大家介紹的oracle+mybatis 使用動態(tài)Sql當(dāng)插入字段不確定的情況下實現(xiàn)批量insert的全部敘述,希望大家喜歡。
相關(guān)文章
Oracle中分組查詢group by用法規(guī)則詳解
這篇文章主要介紹了Oracle中分組查詢group by用法規(guī)則詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07如何解決Oracle數(shù)據(jù)表入庫中文亂碼問題
Oracle數(shù)據(jù)庫在處理中文數(shù)據(jù)時,經(jīng)常會遇到亂碼問題,導(dǎo)致數(shù)據(jù)無法正常顯示和處理,這是因為Oracle數(shù)據(jù)庫默認(rèn)的字符集為US7ASCII,無法識別中文字符,通過修改數(shù)據(jù)庫,客戶端和應(yīng)用程序字符集,將數(shù)據(jù)轉(zhuǎn)換為正確的字符集,可以避免亂碼問題2024-02-02Oracle sql批量插入多條數(shù)據(jù)的實現(xiàn)
這篇文章主要介紹了Oracle sql批量插入多條數(shù)據(jù)的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07Oracle查看表操作歷史記錄并恢復(fù)數(shù)據(jù)的方法
Oracle是一種廣泛應(yīng)用于企業(yè)級數(shù)據(jù)庫系統(tǒng)的軟件,但在操作過程中可能會發(fā)生誤刪除數(shù)據(jù)的情況,這時就需要進(jìn)行數(shù)據(jù)恢復(fù)操作,這篇文章主要給大家介紹了關(guān)于Oracle查看表操作歷史記錄并恢復(fù)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2023-08-08Window下Oracle Database 11g 發(fā)行版2安裝教程
這篇文章主要為大家詳細(xì)介紹了Window下Oracle Database 11g 發(fā)行版2安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07