1. 程式人生 > 實用技巧 >xml中的sql語句foreach欄位

xml中的sql語句foreach欄位

https://blog.csdn.net/wenyichuan/article/details/104951428

  1. foreach的主要用在構建in條件中,它可以在SQL語句中進行迭代一個集合。
  2. foreach元素的屬性主要有 item,index,collection,open,separator,close。
  • item表示集合中每一個元素進行迭代時的別名
  • index指 定一個名字,用於表示在迭代過程中,每次迭代到的位置
  • separator表示在每次進行迭代之間以什麼符號作為分隔符
  • open表示該語句以什麼開始
  • close表示以什麼結束。

在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況 下,該屬性的值是不一樣的,主要有一下3種情況:

  • 如果傳入的是單引數且引數型別是一個List的時候,collection屬性值為list
  • 如果傳入的是單引數且引數型別是一個array陣列的時候,collection的屬性值為array
  • 如果傳入的引數是Map的時候,collection 的屬性值為map 的key值
  • 當使用可迭代物件或者陣列時,index 是當前迭代的次數,item 的值是本次迭代獲取的元素。
  • 當使用 Map 物件(或者 Map.Entry物件的集合)時,index 是鍵,item 是值。
    **

舉例說明

**

  1. 單引數List型別
List idList =new ArrayList();
idList.add(1);
idList.add(2);
idList.add(3);
List list = alarmService.list(idList); 

map.xml :
select * from vehicle where id in
<foreach item="id" collection="list" open="(" separator="," close=")">
        #{id}
</foreach>

2、傳入的值為array

int[] arr  = new int[] {1,3,6,9};
List list = alarmService.list(arr ); 

map.xml :
select * from vehicle where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
        #{id}

3、傳入的引數為map

List list =new ArrayList();
 list.add(1);
 list.add(2);
 Map params =new HashMap();
 params.put("vehicleIdList",list);
List alarmList =alarmService.list(params);

map.xml :
<if test="vehicleIdList != null ">and vehicle_id in 
 <foreach item="id" collection="vehicleIdList" open="(" separator="," close=")"> #{id} </foreach> 
</if>