前面我們已經學習了動態SQL的if、where、set、choose(when,otherwise),今天我們來學習剩下的foreach。 什麼時候用到foreach呢?比如說我們要查詢一個表中id為1,3,4的數據,我們應該寫SQL語句為: select * from TABLE where (i ...
前面我們已經學習了動態SQL的if、where、set、choose(when,otherwise),今天我們來學習剩下的foreach。
什麼時候用到foreach呢?比如說我們要查詢一個表中id為1,3,4的數據,我們應該寫SQL語句為:
select *
from TABLE where (id=1 or id=3 or id=4)
這時候我們就可以把需要查的這些id的數據存放到一個集合中,通過遍歷這個集合來查詢到這些數據,這種時候我們就用到foreach了。
下麵我們來看foreach的具體使用。
還是先在BlogMapper介面中聲明一個方法:
List<Blog> QueryBlogsByForeach(Map<Object, Object> map);
然後配置BlogMapper.xml文件:
<select id="QueryBlogsByForeach" parameterType="map" resultType="Blog"> select * from mybaties.blog <where> <foreach collection="authors" item="author" open="(" close=")" separator="or"> author=#{author} </foreach> </where> </select>
這裡我們來看上面的foreach標簽,collection代表著集合的名字;item表示集合元素,名字自定義,但要與下麵的#{}中的欄位名一致;open和close代表兩邊的邊界;separator代表分割元素的欄位。
接下來測試一下:
@Test public void queryBlogsForEache() { SqlSession sqlSession = MyBatisUtil.getSqlSession(); BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class); ArrayList<String> authors = new ArrayList<>(); Map<Object, Object> map = new HashMap<>(); map.put("authors", authors); List<Blog> blogList = blogMapper.QueryBlogsByForeach(map); for (Blog blog : blogList) { System.out.println(blog); } sqlSession.close(); }
看上面的測試,我們是先聲明瞭一個集合,然後將集合存入Map,相應的鍵就命名“authors”。
測試結果如下:
此時由於集合中沒有任何元素,所以查詢出來的就是所有的結果。
接下來我們往集合里添加元素。
@Test public void queryBlogsForEache() { SqlSession sqlSession = MyBatisUtil.getSqlSession(); BlogMapper blogMapper = sqlSession.getMapper(BlogMapper.class); ArrayList<String> authors = new ArrayList<>(); authors.add("jms"); authors.add("jms1"); authors.add("jms2"); Map<Object, Object> map = new HashMap<>(); map.put("authors", authors); List<Blog> blogList = blogMapper.QueryBlogsByForeach(map); for (Blog blog : blogList) { System.out.println(blog); } sqlSession.close(); }
測試結果如下:
可以看見這次我們查詢的是author='jms1' or author='jms2' or author='jms'的結果。
(本文僅作個人學習記錄用,如有紕漏敬請指正)