mybatis 中 foreach collection的三種用法

foreach的主要用在構(gòu)建in條件中,它可以在SQL語句中進行迭代一個集合椭员。foreach元素的屬性主要有 item,index笛园,collection隘击,open,separator研铆,close埋同。 item表示集合中每一個元素進行迭代時的別名, index指 定一個名字棵红,用于表示在迭代過程中凶赁,每次迭代到的位置, open表示該語句以什么開始逆甜, separator表示在每次進行迭代之間以什么符號作為分隔 符虱肄, close表示以什么結(jié)束。在使用foreach的時候最關(guān)鍵的也是最容易出錯的就是collection屬性交煞,該屬性是必須指定的咏窿,但是在不同情況 下,該屬性的值是不一樣的素征,主要有一下3種情況:

  1. 如果傳入的是單參數(shù)且參數(shù)類型是一個List的時候集嵌,collection屬性值為list
  2. 如果傳入的是單參數(shù)且參數(shù)類型是一個array數(shù)組的時候萝挤,collection的屬性值為array
  3. 如果傳入的參數(shù)是多個的時候,我們就需要把它們封裝成一個Map了纸淮,當然單參數(shù)也可以封裝成map平斩,實際上如果你在傳入?yún)?shù)的時候,在breast里面也是會把它封裝成一個Map的咽块,map的key就是參數(shù)名绘面,所以這個時候collection屬性值就是傳入的List或array對象在自己封裝的map里面的key
    下面分別來看看上述三種情況的示例代碼:
    1.單參數(shù)List的類型:
    1 <select id="dynamicForeachTest" 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,對應(yīng)的Mapper是這樣的public List dynamicForeachTest(List ids);測試代碼:

1 @Test 
2 public void dynamicForeachTest() { 
3 SqlSession session = Util.getSqlSessionFactory().openSession();  
4 BlogMapper blogMapper = session.getMapper(BlogMapper.class); 
5 List ids = new ArrayList(); 
6 ids.add(1); 
7 ids.add(3); 
8 ids.add(6); 
9 List blogs = blogMapper.dynamicForeachTest(ids);
10 for (Blog blog : blogs)
11  System.out.println(blog);
12  session.close();
13 }

2.單參數(shù)array數(shù)組的類型:
1 <select id="dynamicForeach2Test" 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侈沪,對應(yīng)的Mapper代碼:public List dynamicForeach2Test(int[] ids);對應(yīng)的測試代碼:

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

3.自己把參數(shù)封裝成Map的類型
1 <select id="dynamicForeach3Test" 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揭璃,是傳入的參數(shù)Map的key,對應(yīng)的Mapper代碼:public List dynamicForeach3Test(Map params);對應(yīng)測試代碼:

@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(); }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末亭罪,一起剝皮案震驚了整個濱河市瘦馍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌应役,老刑警劉巖情组,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異箩祥,居然都是意外死亡院崇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門袍祖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來底瓣,“玉大人,你說我怎么就攤上這事蕉陋【杵荆” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵凳鬓,是天一觀的道長茁肠。 經(jīng)常有香客問我,道長缩举,這世上最難降的妖魔是什么官套? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮蚁孔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惋嚎。我一直安慰自己杠氢,他們只是感情好,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布另伍。 她就那樣靜靜地躺著鼻百,像睡著了一般绞旅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上温艇,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天因悲,我揣著相機與錄音,去河邊找鬼勺爱。 笑死晃琳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的琐鲁。 我是一名探鬼主播卫旱,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼围段!你這毒婦竟也來了顾翼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤奈泪,失蹤者是張志新(化名)和其女友劉穎适贸,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涝桅,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡拜姿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了苹支。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砾隅。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖债蜜,靈堂內(nèi)的尸體忽然破棺而出晴埂,到底是詐尸還是另有隱情,我是刑警寧澤寻定,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布儒洛,位于F島的核電站,受9級特大地震影響狼速,放射性物質(zhì)發(fā)生泄漏琅锻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一向胡、第九天 我趴在偏房一處隱蔽的房頂上張望恼蓬。 院中可真熱鬧,春花似錦僵芹、人聲如沸处硬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荷辕。三九已至凿跳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疮方,已是汗流浹背控嗜。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骡显,地道東北人疆栏。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像蟆盐,于是被迫代替她去往敵國和親承边。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理石挂,服務(wù)發(fā)現(xiàn)博助,斷路器,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 在mybtis中動態(tài)sql主要用到的幾個節(jié)點元素有: 1痹愚、if2富岳、choose(when, otherwise)3...
    Dl_毛良偉閱讀 914評論 0 2
  • 經(jīng)常在使用foreach是忘記其使用方式,做個筆記拯腮。 foreach元素屬性 foreach元素的屬性主要有 it...
    黃言黃語閱讀 6,284評論 0 1
  • Scala的集合類可以從三個維度進行切分: 可變與不可變集合(Immutable and mutable coll...
    時待吾閱讀 5,815評論 0 4
  • 今日有雨窖式,淅淅瀝瀝,繼而變小动壤,有時像混入風中的霧水萝喘,人能察覺但看得不很明顯,天空保持陰沉琼懊,磚石鋪的地面明滅可見阁簸,涼...
    機易閱讀 262評論 0 1