1. 程式人生 > >Mybatis 之 foreach 批處理 map 中的鍵值 為list 的操作

Mybatis 之 foreach 批處理 map 中的鍵值 為list 的操作

foreach一共有三種類型,分別為List,[](array),Map三種。

foreach的第一篇用來將List和陣列(array)。

下面表格是我總結的各個屬性的用途和注意點。

foreach屬性

屬性 描述
item 迴圈體中的具體物件。支援屬性的點路徑訪問,如item.age,item.info.details。
具體說明:在list和陣列中是其中的物件,在map中是value。
該引數為必選。
collection 要做foreach的物件,作為入參時,List<?>物件預設用list代替作為鍵,陣列物件有array代替作為鍵,Map物件用map代替作為鍵。
當然在作為入參時可以使用@Param("keyName")來設定鍵,設定keyName後,list,array,map將會失效。 除了入參這種情況外,還有一種作為引數物件的某個欄位的時候。舉個例子:
如果User有屬性List ids。入參是User物件,那麼這個collection = "ids"
如果User有屬性Ids ids;其中Ids是個物件,Ids有個屬性List id;入參是User物件,那麼collection = "ids.id"
上面只是舉例,具體collection等於什麼,就看你想對那個元素做迴圈。
該引數為必選。
separator 元素之間的分隔符,例如在in()的時候,separator=","會自動在元素中間用“,“隔開,避免手動輸入逗號導致sql錯誤,如in(1,2,)這樣。該引數可選。
open foreach程式碼的開始符號,一般是(和close=")"合用。常用在in(),values()時。該引數可選。
close foreach程式碼的關閉符號,一般是)和open="("合用。常用在in(),values()時。該引數可選。
index 在list和陣列中,index是元素的序號,在map中,index是元素的key,該引數可選。

Service

public Message allSaveReservation(PrivateBrandEntity main, List<PrivateBrandEntity> items){

Map params = new HashMap();

params.put("djh", djh);

params.put("items", items);

saveReservationCB(params);

}

dao mapper 層保持與saveReservationCB(params);一致

mapper.xml

<!-- 插入table資料 -->
<insert id="saveReservationCB"
parameterType="java.util.Map">
insert into YYZY.T_YYZY_ZYPP_YL_CB(ZBDM, YYDM, YYPC, YLJS, YYZL, MJJZ, YYNF, YYCDDM, YYDJDM, YYLBDM, YYKBDM, YYBZDM)


with yyxx(YYNF,YYCDDM,YYDJDM,YYLBDM,YYKBDM,YYBZDM,YYPC,yljs) AS
(
VALUES 

<foreach collection="items" item="item" separator=",">
(#{item.yynf},#{item.yycddm},#{item.yydjdm},#{item.yylbdm},#{item.yykbdm},#{item.yybzdm},#{item.yypc},#{item.yljs})
</foreach>
)

,tb_zbdm as(
select zbdm
from YYZY.T_YYZY_ZYPP_YL_ZB
where djh= #{djh, jdbcType=VARCHAR}
group by zbdm)

select b.zbdm, d.YYDM, a.YYPC, a.YLJS, c.gjmj*a.yljs as YYZL, c.gjmj as MJJZ, a.YYNF, D.YYCDBS, D.YYDJBS, D.YYLBBS, D.YYKBBS, A.YYBZDM
from yyxx as a
 left join tb_zbdm as b
on 1=1
 left join DIM.T_DIM_YYZY_GJMJ as c
on a.yylbdm=c.yylbdm
 and a.yykbdm=c.yykbdm
left join YYZY.T_YYZY_YYZDBMX_7 as d
on a.yycddm=d.yycddm
and a.yydjdm=d.yydjdm
and a.yylbdm=d.yylbdm
and a.yykbdm=d.yykbdm
and a.yynf=d.yynf
and a.yypc=d.yypc
</insert>