mybatis中foreach的用法
阿新 • • 發佈:2019-01-27
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