Mybatis foreach 批量操作
阿新 • • 發佈:2019-01-10
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 = ? (一定要注意到$和#的區別,$的引數直接輸出,#的引數會被替換為?,然後傳入引數值執行。)