原文地址:https://blog.csdn.net/jason5186/article/details/40896043mysql
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,該參數可選。
<select id="countByUserList" resultType="_int" parameterType="list">
select count(*) from users
<where>
id in
<foreach item="item" collection="list" separator="," open="(" close=")" index="">
#{item.id, jdbcType=NUMERIC}
</foreach>
</where>
</select>
::select count(*) from users WHERE id in ( ? , ? )
<insert id="addList">
INSERT INTO DELIVER
(
<include refid="selectAllColumnsSql"/>
)
<foreach collection="deliverList" item="item" separator="UNION ALL">
SELECT
#{item.id, jdbcType=NUMERIC},
#{item.name, jdbcType=VARCHAR}
FROM DUAL
</foreach>
</insert>
::insert into deliver select ?,? from dual union all select ?,? from dual
<insert id="ins_string_string">
insert into string_string (key, value) values
<foreach item="item" index="key" collection="map"
open="" separator="," close="">(#{key}, #{item})</foreach>
</insert>
::insert into string_string (key, value) values (?, ?) , (?, ?) -- mysql
<select id="sel_key_cols" resultType="int">
select count(*) from key_cols where
<foreach item="item" index="key" collection="map"
open="" separator="AND" close="">${key} = #{item}</foreach>
</select>
::select count(*) from key_cols where col_a = ? AND col_b = ? (必定要注意到$和#的區別,$的參數直接輸出,#的參數會被替換爲?,而後傳入參數值執行。)
sql