Mybatis 之 foreach 批處理 map 中的鍵值 為list 的操作
阿新 • • 發佈:2019-01-09
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>