1. 程式人生 > >mybatis中foreach的使用

mybatis中foreach的使用

foreach的格式:
<foreach item="item" index="index" collection="" open="(" separator="," close=")">
item代表迴圈體中具體的某個物件(可以代表 List、Arry、Map中的value值)
collection代表遍歷的物件分為4種情況:
1、作為入參時List預設用list,Array用array,Map沒有預設的鍵也就是傳入的集合(list,array,map)的名字,這個名字可以在foreach裡面隨便引用
2、當然在作為入參時可以使用@Param("params")來設定鍵,設定keyName後,list,array將會失效
3、如果User有屬性List ids。入參是User物件,那麼這個collection = "ids"如果User有屬性Ids ids;其中Ids是個物件,Ids有個屬性List id;入參是User物件,那麼collection = "ids.id"
4、如果傳入引數型別為map,這個入參有註解@Param("params"),則map的所有的key集合可以寫成params.keys,所有值集合可以寫成params.values
separator:分隔符,自動在元素之間新增“,”
open:開始符號
close:結束符號
index:在list和陣列中,index是元素的序號,在map中,index是元素的key,該引數可選。
這個是查詢的寫法:查詢存在與集合中id的資料使用IN+foreach
<if test="cm.ids != null">
    and `id` IN
    <foreach item="item" index="index" collection="cm.ids" open="(" separator="," close=")">
        #{item}
    </foreach>
</if>
當需要插入多條資料的時候的寫法:
 insert into employee_relations (id, pid, cid)        
values        
<foreach collection="list" item="item" index="index" separator=",">
(#{item.id},#{item.pid},#{item.cid})        
</foreach>
 注意如果傳入的物件長度為0的時候 如list的長度為0則需要加入判斷,如果傳入長度為0的物件則會出現報錯。
<if test="list!=null and list.size()>0"><foreach></foreach></if>