MyBatis 中 foreach collection的三種用法

foreach主要用在構建in條件中,它能夠在SQL語句中進行迭代一個集合。
foreach元素的屬性主要有 item,index,collection,open,separator,close。    java

item表示集合中每個元素進行迭代時的別名,              ===》必定要有,隨便寫一個別名
index指 定一個名字,用於表示在迭代過程當中,每次迭代到的位置 ==>能夠沒有
open表示該語句以什麼開始                             ==>能夠沒有
separator表示在每次進行迭代之間以什麼符號做爲分隔 符,   ===>必定要有
close表示以什麼結束。                               ==>能夠沒有

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

  • 1 若是傳入的是單參數且參數類型是一個List的時候,collection屬性值爲list
  • 2.若是傳入的是單參數且參數類型是一個array數組的時候,collection的屬性值爲array
  • 3.若是傳入的參數是多個的時候,咱們就須要把它們封裝成一個Map了,固然單參數也能夠封裝成map,實際上若是你在傳入參數的時候,在breast裏面也是會把它封裝成一個Map的,map的key就是參數名,因此這個時候collection屬性值就是傳入的List或array對象在本身封裝的map裏面的key 下面分別來看看上述三種狀況的示例代碼:

1.單參數List的類型:session

1 <select id="dynamicForeachTest" parameterType="java.util.List" resultType="Blog">
2           select * from t_blog where id in
3        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
4                #{item}       
5        </foreach>    
6    </select>

上述collection的值爲list,對應的Mapper是這樣的
public List dynamicForeachTest(List ids);app

@Test
public void dynamicForeachTest() {
    SqlSession session = Util.getSqlSessionFactory().openSession();      
    BlogMapper blogMapper = session.getMapper(BlogMapper.class);
    List ids = new ArrayList();
    ids.add(1);
    ids.add(3);
    ids.add(6);
    List blogs = blogMapper.dynamicForeachTest(ids);
    for (Blog blog : blogs)
       System.out.println(blog);
       session.close();
    }
}

2.單參數array數組的類型:測試

1 <select id="dynamicForeach2Test" parameterType="java.util.ArrayList" resultType="Blog">
2     select * from t_blog where id in
3     <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
4          #{item}
5     </foreach>
6 </select>

上述collection爲array,對應的Mapper代碼:
public List dynamicForeach2Test(int[] ids);
對應的測試代碼:spa

@Test
public void dynamicForeach2Test() {
    SqlSession session = Util.getSqlSessionFactory().openSession();
    BlogMapper blogMapper = session.getMapper(BlogMapper.class);
    int[] ids = new int[] {1,3,6,9};
    List blogs = blogMapper.dynamicForeach2Test(ids);
    for (Blog blog : blogs)
       System.out.println(blog);    
       session.close();
    }
}

3.本身把參數封裝成Map的類型code

1 <select id="dynamicForeach3Test" parameterType="java.util.HashMap" resultType="Blog">
2         select * from t_blog where title like "%"#{title}"%" and id in
3          <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
4               #{item}
5          </foreach>
6 </select>

上述collection的值爲ids,是傳入的參數Map的key,對應的Mapper代碼:
public List dynamicForeach3Test(Map params);
對應測試代碼:對象

@Test
    public void dynamicForeach3Test() {
        SqlSession session = Util.getSqlSessionFactory().openSession();
        BlogMapper blogMapper = session.getMapper(BlogMapper.class);
        final List ids = new ArrayList();
        ids.add(1);
        ids.add(2);
        ids.add(3);
        ids.add(6);
        ids.add(7);
        ids.add(9);
        Map params = new HashMap();
        params.put("ids", ids);
        params.put("title", "中國");
        List blogs = blogMapper.dynamicForeach3Test(params);
        for (Blog blog : blogs)
            System.out.println(blog);
        session.close();
     }
}
相關文章
相關標籤/搜索