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了,当然单参数也可以封装成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<Blog> dynamicForeachTest(List<Integer> ids);测试代码:     @Test    public void dynamicForeachTest() {        SqlSession session = Util.getSqlSessionFactory().openSession();                         BlogMapper blogMapper = session.getMapper(BlogMapper.class);        List<Integer> ids = new ArrayList<Integer>();       ids.add(1);        ids.add(3);         ids.add(6);         List<Blog> 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<Blog> 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<Blog> 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<Blog> dynamicForeach3Test(Map<String, Object> params);
对应测试代码:    @Test
public void dynamicForeach3Test() {
SqlSession session = Util.getSqlSessionFactory().openSession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
final List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(2);
ids.add(3);
ids.add(6);
ids.add(7);
ids.add(9);
Map<String, Object> params = new HashMap<String, Object>();        params.put("ids", ids);        params.put("title", "中国");        List<Blog> blogs = blogMapper.dynamicForeach3Test(params);        for (Blog blog : blogs)
System.out.println(blog);
session.close();
}

转载于:https://www.cnblogs.com/kunsunshine/p/6402945.html

[转]MyBatis的foreach语句详解相关推荐

  1. MyBatis的foreach语句详解

    http://my.oschina.net/linuxred/blog/38802 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 ite ...

  2. mybatis中foreach标签详解

    转载自:https://blog.csdn.net/gwd1154978352/article/details/75408498 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一 ...

  3. MyBatis SQL语句详解

    MyBatis SQL语句详解 1 CRUD标签 1.1 select 1.2 insert 1.3 update 1.4 delete 1.5 #{ }和${ }的区别 2 动态SQL 2.1 if ...

  4. smarty手册-smarty中foreach循环语句详解

    原文地址:smarty手册-smarty中foreach循环语句详解作者:谭博 {foreach}循环也有自身属性的变量,可以通过{$smarty.foreach.name.property}访问,其 ...

  5. Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解

    封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...

  6. Java教程:Java continue语句详解

    Java教程有时强迫一个循环提早反复是有用的,也就是,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,所以 Java 提供了 continue 语句.continue 语句是 break ...

  7. MyBatis的缓存机制详解

    MyBatis的缓存机制详解 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制,缓存可以极大的提升查询效率.MyBatis中默认定义了两级缓存,分别是一级缓存和二级缓存. ( ...

  8. 【MyBatis】MyBatis 二级缓存全详解

    1.概述 转载:MyBatis 二级缓存全详解 上一篇文章中我们介绍到了 MyBatis 一级缓存其实就是 SqlSession 级别的缓存,什么是 SqlSession 级别的缓存呢?一级缓存的本质 ...

  9. 从零学Java(25)之 break语句详解

    作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...

最新文章

  1. 笔记本电脑处理器_苹果高管:我们都没有想到M1的性能有那么强|英特尔|处理器|iphone|ipad|笔记本电脑...
  2. 在ie7中overflow: hidden失效问题哦及解决方案
  3. 利用virtualenv和pip构建虚环境并安装配置推送客户端
  4. onnx:Resize in opset 11 to support Pytorch‘s behavior
  5. Linux Tomcat 简介
  6. 绘图基础语法与常用参数
  7. mapperscan注解_SpringBoot 遗忘后的简单快速回忆之环境搭建与常见注解
  8. phpadmin 安装
  9. windows 下使用 nc 命令报错,与 Linux 不同。
  10. 什么是MPLS?多协议标签交换(MPLS)基础知识和工作原理
  11. 微信小程序:网课查题微信小程序源码下载,题库资源丰富自动采集,支持语音拍照识别
  12. LC振荡器的工作原理
  13. 泰坦尼克号 3D版 Titanic 3D (2012)
  14. AAAI 2021 Structured Co-reference Graph Attention for Video-grounded Dialogue
  15. 9530 blackberry 上网
  16. tipask火车头采集器文章和提问发布模块|非免登录
  17. iOS总结-Runtime篇之用途及面试题的总结一黑魔法Method Swizzling
  18. 机器人仿真控制(以ABB为例)
  19. matlab 蜗杆轮廓,solidworks环面蜗杆画法
  20. 移动端(手机端)页面自适应解决方案—rem布局篇 1

热门文章

  1. Makefile的重建与include指令
  2. 数据结构与算法 -- 再论递归
  3. 1028 List Sorting
  4. 2017-9-17pat甲级 B
  5. Android截屏方法总结
  6. Android Studio使用Gradle上传AAR至Maven
  7. 【问链-EOS公开课】第十课 EOS 错误码整理
  8. 谷歌浏览器中文版_GitHub上最励志的计算机自学教程:8个月,从中年Web前端到亚马逊百万年薪软件工程师 | 中文版...
  9. Hdu 1754 . I Hate It
  10. python控制手机自动刷新闻_Python脚本利用adb进行手机控制的方法