mybatis 中 foreach collection的三种用法

来源:互联网 发布:吴江js华腾公寓自提柜 编辑:程序博客网 时间:2024/06/02 01:45

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

foreach元素的属性主要有 item,index,collection,open,separator,close。

     item表示集合中每一个元素进行迭代时的别名,    index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,    open表示该语句以什么开始,    separator表示在每次进行迭代之间以什么符号作为分隔 符,    close表示以什么结束。

在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可

以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key 下面分别来看看上述三种情况的示例代码:
1.单参数List的类型

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

上述collection的值为list,对应的Mapper是这样的
public List dynamicForeachTest(List ids);
测试代码:@Test 2
public void dynamicForeachTest() {
SqlSession session=Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class); List ids = new ArrayList();
ids.add(1);
ids.add(6);
List blogs = blogMapper.dynamicForeachTest(ids);

for (Blog blog : blogs){
System.out.println(blog);
session.close();
}
}
2.单参数array数组的类型:

 <select id="dynamicForeach2Test" parameterType="java.util.ArrayList" 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);
对应的测试代码:

@Testpublic 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 * from t_blog where title like “%”#{title}”%” and id in #{item}
上述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();     }
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 厕所太小洗衣机怎么办 洗衣机进水太小怎么办 油性笔干了怎么办 水笔写不出来怎么办 手机图案密码打不开怎么办 图案锁住了打不开怎么办 手机绘制图案打不开怎么办 小孩吃了润滑油怎么办 宝宝吃了润滑油怎么办 透明胶带撕不起怎么办 马克笔颜料没了怎么办 匡威鞋掉色了怎么办 补眉后颜色很淡怎么办 磨砂画出毛了怎么办 纹眉毛不上色怎么办 四岁儿童龋齿怎么办 墙没有刷乳胶漆怎么办 壁纸不想要了怎么办 自粘墙纸撕不掉怎么办 打雷了怎么办主题画 打雷了怎么办小班教案 费雪小火车不走怎么办 宝宝睡觉要开灯怎么办 门上有人做记号怎么办 颜料粘上衣服洗不掉怎么办 半夜有小偷开锁怎么办 幼儿园人数较多怎么办 附近幼儿园拖班招满了怎么办 6个月大宝宝拉肚子怎么办 婴儿容易吐奶怎么办 新生儿睡眠时间颠倒怎么办 婴儿睡觉黑白颠倒怎么办 婴儿黑白颠倒了怎么办 宝宝肠粘膜受损怎么办 dnf会卡换装怎么办? 孩子不讲理蛮横怎么办 孩子不爱上学了怎么办 幼儿园孩子不爱上学怎么办 额头撞肿了怎么办 两岁半宝宝说话晚怎么办 1岁宝宝拉肚子怎么办?