转载自:https://blog.csdn.net/gwd1154978352/article/details/75408498

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 dynamicForeachTest(List ids);
测试代码:

@Testpublic 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);
对应的测试代码:

@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 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);
对应测试代码:

@Testpublic 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标签详解相关推荐

  1. MyBatis中@MapKey使用详解

    MyBatis中@MapKey使用详解 我们在上一篇文章中讲到在Select返回类型中是返回Map时,是对方法中是否存在注解@MapKey,这个注解我也是第一次看到,当时我也以为是纯粹的返回单个数据对 ...

  2. css中table标签详解(一)

    css中table标签详解(一) 什么是table标签,以及table标签的组成? 不叨叨,直接上代码 <table><tr><td></td>< ...

  3. W3C中meta标签详解

    2019独角兽企业重金招聘Python工程师标准>>> meta是html语言head区的一个辅助性标签.几乎所有的网页里,我们可以看到类似下面这段的html代码: <meta ...

  4. Maven中scope标签详解

    概述 scope元素的作用:控制 dependency 元素的使用范围.通俗的讲,就是控制 Jar 包在哪些范围被加载和使用.具体值如下: compile:默认值.表示被依赖项目需要参与当前项目的编译 ...

  5. Mybatis中的缓存详解

    本文来说下Mybatis中的缓存 文章目录 Mybatis是什么 Mybatis的一级缓存 Mybatis的二级缓存 本文小结 Mybatis是什么 Mybatis是一个半自动 ORM(对象关系映射) ...

  6. mybatis 中 if-test 判断详解

    <if test="takeWay == '0'">]mybatis的if判断 单个的字符要写到双引号里面才行,改为<if test='takeWay == &q ...

  7. ROS中Remap标签详解

    remap标签介绍 remap标签"允许你以更结构化的方式将名称重新映射参数传递给ROS节点,而不是直接设置<节点>的参数属性. 作用 重命名一个已经存在的主题. 在自己的lan ...

  8. MyBatis的foreach语句详解

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

  9. JSTL中fmt标签详解

    2019独角兽企业重金招聘Python工程师标准>>> 一:JSTL格式化标签又称为I18N标签库,主要用来编写国际化的WEB应用,使用此功能可以对一个特定的语言请求做出合适的处理. ...

最新文章

  1. 人们需要更美观的数据中心
  2. vscode+MinGW+cmake设置轻量ide
  3. [转]SQLObject加MySQL的 utf-8解决之道
  4. USACO3.32Shopping Offers(DP)
  5. mysql创建分区是否存在_mysql中如何判断是否支持分区
  6. 计算机程程序员英语,计算机程序员常用英语词汇(2)
  7. 利用Android 8.0 ShortcutManager创建桌面快捷图标
  8. iOS Charles 抓包
  9. java employee list_JSP中List中的$ {employee.id}抛出java.lang.NumberFormat
  10. 区块链每日一问 | 数字货币的场内交易和场外交易各指什么?各有哪些特点?...
  11. 关于如何修改ISA server 防火墙并行最大TCP连接数问题和优化ISA 服务器淹没缓解设置
  12. err=etherbase address must be explicitly specified
  13. eureka集群的两种配置方式:配置文件方式与DNS方式
  14. sklearn中xgboost模块的XGBClassifier函数
  15. 小程序 | 微信小程序布局左对齐自动换行
  16. 一键安装包php.ini,laravel 在windows中使用一键安装包步骤
  17. Kaggle案例泰坦尼克号问题
  18. 班级网站-前端网页技术精美完整源码HTML+CSS+JS
  19. 超实用!教你用 Python 获取并下载美股数据
  20. linux中的/usr,/var,/opt目录详解

热门文章

  1. 热部署插件JRebel使用解决方案(安装+踩坑+使用方法)傻瓜式超详细!!!
  2. Maven 中央仓库地址
  3. Icon class生成器(Python)
  4. 控制谷歌浏览器的最大化最小化
  5. [原创]DebugTools系列(4):AQTime经验总结
  6. 微软CEO纳德拉拥抱Linux意欲何为?
  7. 批量恢复文件的Py脚本
  8. 完全卸载 RAC_clusterware的方法
  9. android 定时打电话教程
  10. XenApp6 建立请求的连接时出错解决方法