最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年11月01日 15:35:29   作者:_coding_  
最近接了一個項目,其中項目需求,有一個非常糾結的問題,由于業(yè)務的關系,DB的數(shù)據(jù)表無法確定,在使用過程中字段可能會增加,這樣在insert時給我造成了很大的困擾。接下來,通過本篇文章給大家介紹oracle+mybatis 使用動態(tài)Sql當插入字段不確定的情況下實現(xiàn)批量insert

最近做項目遇到一個挺糾結的問題,由于業(yè)務的關系,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的鍵對應數(shù)據(jù)表的字段,值是你要insert的值,這樣就可以通過foreach取出list的值作為insert語句的value,但由于map是無序的,存放的順序和
遍歷時取值的順序不一定一致,所以為了確保insert字段和值可以一一對應,可以通過遍歷一次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當插入字段不確定的情況下實現(xiàn)批量insert的全部敘述,希望大家喜歡。

相關文章

最新評論

钟祥市| 肥东县| 邛崃市| 福建省| 大同县| 阳西县| 万源市| 江川县| 尤溪县| 循化| 晋州市| 丹江口市| 枣强县| 观塘区| 长寿区| 涿鹿县| 兴海县| 卫辉市| 涪陵区| 牙克石市| 邛崃市| 黔南| 茶陵县| 三江| 龙南县| 西峡县| 昌吉市| 宝清县| 龙井市| 遂宁市| 青州市| 朝阳市| 航空| 阳原县| 阿巴嘎旗| 北辰区| 九龙县| 山东省| 达日县| 襄垣县| 泉州市|