欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

oracle+mybatis 使用動態(tài)Sql當(dāng)插入字段不確定的情況下實現(xiàn)批量insert

 更新時間:2015年11月01日 15:35:29   作者:_coding_  
最近接了一個項目,其中項目需求,有一個非常糾結(jié)的問題,由于業(yè)務(wù)的關(guān)系,DB的數(shù)據(jù)表無法確定,在使用過程中字段可能會增加,這樣在insert時給我造成了很大的困擾。接下來,通過本篇文章給大家介紹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數(shù)據(jù)庫超全的多表查詢連接

    oracle數(shù)據(jù)庫超全的多表查詢連接

    這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫超全的多表查詢連接的相關(guān)資料,多表連接查詢實際上是通過各個表之間公共字段的關(guān)鍵性來查詢數(shù)據(jù)的,它是關(guān)系數(shù)據(jù)庫查詢的最主要的特征,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Oracle中分組查詢group by用法規(guī)則詳解

    Oracle中分組查詢group by用法規(guī)則詳解

    這篇文章主要介紹了Oracle中分組查詢group by用法規(guī)則詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Oracle 中生成流水號的方法

    Oracle 中生成流水號的方法

    這篇文章主要介紹了Oracle 中生成流水號的方法 的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • 如何解決Oracle數(shù)據(jù)表入庫中文亂碼問題

    如何解決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-02
  • Oracle sql批量插入多條數(shù)據(jù)的實現(xiàn)

    Oracle sql批量插入多條數(shù)據(jù)的實現(xiàn)

    這篇文章主要介紹了Oracle sql批量插入多條數(shù)據(jù)的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Oracle查看表操作歷史記錄并恢復(fù)數(shù)據(jù)的方法

    Oracle查看表操作歷史記錄并恢復(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-08
  • Oracle數(shù)據(jù)庫安全策略

    Oracle數(shù)據(jù)庫安全策略

    Oracle數(shù)據(jù)庫安全策略...
    2007-03-03
  • Window下Oracle Database 11g 發(fā)行版2安裝教程

    Window下Oracle Database 11g 發(fā)行版2安裝教程

    這篇文章主要為大家詳細(xì)介紹了Window下Oracle Database 11g 發(fā)行版2安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Oracle的默認(rèn)用戶密碼

    Oracle的默認(rèn)用戶密碼

    創(chuàng)建表空間和用戶時,需要的時候竟然忘記了密碼,試了好多次都沒連接上,進(jìn)而用戶也被鎖定,下面就教您處理Oracle默認(rèn)用戶的密碼問題的方法,希望對和我一樣情況的朋友們有所幫助
    2012-07-07
  • ORACLE中段的HEADER_BLOCK示例詳析

    ORACLE中段的HEADER_BLOCK示例詳析

    這篇文章主要給大家介紹了關(guān)于ORACLE中段的HEADER_BLOCK的相關(guān)資料,文中通過是示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09

最新評論