mybatis中foreach標籤詳解
foreach的主要用在構建in條件中,它可以在SQL語句中進行迭代一個集合。
foreach元素的屬性主要有 item,index,collection,open,separator,close。
item表示集合中每一個元素進行迭代時的別名,
index指 定一個名字,用於表示在迭代過程中,每次迭代到的位置,
open表示該語句以什麼開始,
separator表示在每次進行迭代之間以什麼符號作為分隔 符,
close表示以什麼結束。
在使用foreach的時候最關鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況 下,該屬性的值是不一樣的,主要有一下3種情況:
1. 如果傳入的是單引數且引數型別是一個List的時候,collection屬性值為list
2. 如果傳入的是單引數且引數型別是一個array陣列的時候,collection的屬性值為array
3. 如果傳入的引數是多個的時候,我們就需要把它們封裝成一個Map了,當然單引數也可
上述collection為array,對應的Mapper程式碼:
public List dynamicForeach2Test(int[] ids);
對應的測試程式碼:
public List dynamicForeach3Test(Map params);
對應測試程式碼:
foreach元素的屬性主要有 item,index,collection,open,separator,close。
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 型別
<select id="dynamicForeachTest" resultType="Blog">
select * from t_blog where id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
上述collection的值為list,對應的Mapper是這樣的
public List dynamicForeachTest(List ids);
測試程式碼:
@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陣列的型別:
<select id="dynamicForeach2Test" resultType="Blog">
select * from t_blog where id in
<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
上述collection為array,對應的Mapper程式碼:
public List dynamicForeach2Test(int[] ids);
對應的測試程式碼:
@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的型別
<select id="dynamicForeach3Test" resultType="Blog">
select * from t_blog where title like "%"#{title}"%" and id in
<foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</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();
}
相關文章
- MyBatis foreach標籤MyBatis
- mybatis foreach標籤的解釋 與常用之處MyBatis
- Mybatis的 foreach 標籤使用方法.MyBatis
- MyBatis學習——foreach標籤的使用MyBatis
- Mybatis系列:解決foreach標籤內list為空的問題MyBatis
- Mybatis中Foreach動態SQL標籤(map和list兩種情況)MyBatisSQL
- mybatis 根據多個id查詢資料 foreach標籤MyBatis
- Maven中optional標籤詳解(轉)Maven
- MyBatis從入門到精通(八):MyBatis動態Sql之foreach標籤的用法MyBatisSQL
- input 標籤詳解
- img標籤詳解
- ANT標籤詳解
- HTML標籤詳解HTML
- maven中的scope標籤類別詳解Maven
- Struts標籤庫詳解
- mybatis中 if 標籤 test 等於判斷MyBatis
- Html網頁中meta標籤及用法詳解HTML網頁
- POM.xml 標籤詳解XML
- Git tag標籤用法詳解Git
- HTML常見標籤詳解HTML
- struts2標籤詳解 .
- Mybatis中常用的標籤MyBatis
- 利用c:forEach標籤遍歷陣列陣列
- springmvc常用註解標籤詳解SpringMVC
- dedecms模板標籤dede:channelartlist詳解
- Go 結構體標籤詳解Go結構體
- spring xml配置標籤詳解SpringXML
- 自定義分頁標籤詳解
- HTML5標籤embed詳解HTML
- Angular中innerHTML標籤的樣式不起作用詳解AngularHTML
- MyBatis中的<where>標籤和where子句的區別MyBatis
- HTML5常見標籤詳解HTML
- Struts2的OGNL標籤詳解
- mybatis的 choose -- when test -- otherwise 標籤和 if test 標籤的區別MyBatis
- HTML表單標籤詳解:如何用HTML標籤打造互動網頁?HTML網頁
- jsp中c標籤的詳細使用JS
- 標籤實現預載入功能詳解
- JavaScript物件導向修改標籤頁詳解JavaScript物件