xml中的sql語句foreach欄位
阿新 • • 發佈:2021-01-08
https://blog.csdn.net/wenyichuan/article/details/104951428
- foreach的主要用在構建in條件中,它可以在SQL語句中進行迭代一個集合。
- 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 是值。
**
舉例說明
**
- 單引數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>