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

mybatis中foreach的用法

1.場景還原

    工作中,有很多地方需要用到批量刪除或批量插入,或者是批量更新,抑或是批量查詢,這樣的需求難免會用到mybatis中的foreach標籤

2.foreach介紹

<foreach>標籤的用法:
6個引數:
collection:要迴圈的集合

index:迴圈索引;

item:集合中的一個元素(item和collection,按foreach迴圈理解);

open:以什麼開始;

close:以什麼結束;

separator:迴圈內容之間以什麼分隔

mybatis接受的引數分為:(1)基本型別;(2)物件;(3)List;(4)陣列;(5)Map

接下來筆者主要對list,陣列,map做詳細講解:

3.實現方案

①入參為list,collection為list

底層mapper:

<!--批量刪除-->
<update id="deleteWorkshopByIds" parameterType="Integer" >
update workshop set status =0
   where id in
   <foreach collection="list" index="i" item="id" open="(" separator="," close=")">
#{id}
   </foreach>
</update>

dao層申明:

Integer deleteWorkshopByIds(List<Integer> ids);

mapper測試

@Test
public void test4(){
    List<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
ids.add(3);
Integer i = workshopDao.deleteWorkshopByIds(ids);
logger.info("刪除:"+i);
}
測試結果:


②入參為陣列,collection為array

底層mapper:

<update id="deleteWorkshopByArray" parameterType="Integer" >
update workshop set status =0
   where id in
   <foreach collection="array" index="i" item="id" open="(" separator="," close=")">
#{id}
   </foreach>
</update>
dao層申明:
Integer deleteWorkshopByArray(int[] arrays);
mapper測試:
@Test
public void test5(){
   int[] array = new int[]{3,4,5};
Integer i = workshopDao.deleteWorkshopByArray(array);
logger.info("刪除:"+i);
}
測試效果:


③入參為map,collection為集合的名稱

底層mapper:

<select id="getWorkShopByMap" resultType="com.cckj.bean.Workshop" parameterType="java.util.Map">
SELECT * FROM workshop where status = #{status} AND company_id IN
   <foreach collection="ids" item="id" index="i" open="(" separator="," close=")">
#{id}
   </foreach></select>
dao層申明:
List<Workshop> getWorkShopByMap(HashMap map);
mapper測試:
@Test
public void test6(){
    List<Integer> ids = new ArrayList<>();
ids.add(1);
ids.add(2);
ids.add(3);
HashMap map = new HashMap();
map.put("ids",ids);
map.put("status",1);
List<Workshop> list= workshopDao.getWorkShopByMap(map);
logger.info("查詢的個數"+list.size());
}
或者
@Test
public void test6(){
    int[] ids = new int[]{1,2,3};
HashMap map = new HashMap();
map.put("ids",ids);
map.put("status",1);
List<Workshop> list= workshopDao.getWorkShopByMap(map);
logger.info("查詢的個數"+list.size());
}
測試效果:


在這裡值得注意的是,實現類中put到map中集合的是key要與collection的值相等;

好了,今天就這樣吧!我是張星,歡迎加入博主技術交流群,群號:313145288