原文:https://www.cnblogs.com/xiemingjun/p/9800999.html

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的类型:

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

上述collection的值为list,对应的Mapper是这样的
public List dynamicForeachTest(List ids);
测试代码:

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

2.单参数array数组的类型:

  1. 1 <select id="dynamicForeach2Test" parameterType="java.util.ArrayList" resultType="Blog">
  2. 2 select * from t_blog where id in
  3. 3 <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
  4. 4 #{item}
  5. 5 </foreach>
  6. 6 </select>

上述collection为array,对应的Mapper代码:
public List dynamicForeach2Test(int[] ids);
对应的测试代码:

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

3.自己把参数封装成Map的类型

  1. 1 <select id="dynamicForeach3Test" parameterType="java.util.HashMap" resultType="Blog">
  2. 2 select * from t_blog where title like "%"#{title}"%" and id in
  3. 3 <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
  4. 4 #{item}
  5. 5 </foreach>
  6. 6 </select>

上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:
public List dynamicForeach3Test(Map params);
对应测试代码:

  1. @Test
  2. public void dynamicForeach3Test() {
  3. SqlSession session = Util.getSqlSessionFactory().openSession();
  4. BlogMapper blogMapper = session.getMapper(BlogMapper.class);
  5. final List ids = new ArrayList();
  6. ids.add(1);
  7. ids.add(2);
  8. ids.add(3);
  9. ids.add(6);
  10. ids.add(7);
  11. ids.add(9);
  12. Map params = new HashMap();
  13. params.put("ids", ids);
  14. params.put("title", "中国");
  15. List blogs = blogMapper.dynamicForeach3Test(params);
  16. for (Blog blog : blogs)
  17. System.out.println(blog);
  18. session.close();
  19. }

mybatis foreach中collection的三种用法的更多相关文章

  1. foreach中collection的三种用法

    转载:http://blog.sina.com.cn/s/blog_b0d90e8c0102v1q1.html 传参参考:http://www.cnblogs.com/ruiati/p/6410339 ...

  2. java中 this 的三种用法

    Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ...

  3. c++中new的三种用法详细解析

    转载至: http://www.jb51.net/article/41524.htm 以下的是对c++中new的三种使用方法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助. 一. ...

  4. mybatis 中 foreach collection的三种用法(转)

    文章转自 https://blog.csdn.net/qq_24084925/article/details/53790287 oreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集 ...

  5. mybatis 中 foreach collection的三种用法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...

  6. Mybatis 中 foreach collection 的三种用法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...

  7. mybatis中foreach collection的三种用法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ...

  8. React中ref的三种用法 可以用来获取表单中的值 这一种类似document.getXXId的方式

    import React, { Component } from "react" export default class MyInput extends Component { ...

  9. C#中new的三种用法

    在 C# 中,new 关键字可用作运算符.修饰符或约束. 1)new 运算符:用于创建对象和调用构造函数. 2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员. 3)new ...

随机推荐

  1. BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路

    原文链接http://www.cnblogs.com/zhouzhendong/p/8686871.html 题目传送门 - BZOJ1001 题意 长成上面那样的网格图求最小割. $n,m\leq ...

  2. iOS app启动流程

    最近看了些Runtime Runloop的一些知识.边看边摸索.看到群里有人在问 一些面试题.其中就提到了app的启动流程. 所以这里也研究小结一下,以供自己学习备用. 1.项目要运行,就要有入口. ...

  3. 如何在github上搭建网站?

    3年前就想写这篇文章了,一直没写,拖到现在,迟到总比不到好,哈哈.github pages只支持静态博客(html,css,js),不支持服务端(php,physon). 一.尝试一下 1.在电脑上安 ...

  4. YOLO系列:YOLO v1深度解析

    声明一点,我是工程应用人员,此文章仅适合算法应用工程师. 1.首先 先看一下YOLO的整体结构: 2.其次 看一下YOLO的工作过程: (1) 将原图划分为SxS的网格.如果一个目标的中心落入某个格子 ...

  5. Java数组常用方法

    数组基础:http://www.cnblogs.com/mengdd/archive/2013/01/04/2844264.html import java.util.Arrays; 1):创建数组 ...

  6. Java并发编程(十二)-- 阻塞队列

    在介绍Java的阻塞队列之前,我们简单介绍一下队列. 队列 队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向 ...

  7. 潭州课堂25班:Ph201805201 tornado 项目 第二课 项目 基本功能模块和 Git 使用 (课堂笔记)

    tornado 相关说明 把图片显示在页面, 创建个 static 文件夹, 在这个文件下存放几张图片 在配置中指定静态文件路径, 在 html 文件中迭代出图片, 创建个包,重构 handlers ...

  8. LOJ #10084. 「一本通 3.3 练习 1」最小圈(二分+SPFA判负环)

    题意描述: 见原LOJ:https://loj.ac/problem/10084 题解: 假设所求的平均最小值为X,环上各个边的权值分别为A1,A2...Ak,可以得到: X=(A1+A2+A3+.. ...

  9. tarjan求双联通分量(割点,割边)

    之前一直对tarjan算法的这几种不同应用比较混淆...我太弱啦! 被BLO暴虐滚过来 用tarjan求点双,很多神犇都给出了比较详细的解释和证明,在这里就不讲了(其实是这只蒟蒻根本不会orz) 这里 ...

  10. ajax请求json中的数据

    在这里不多说,直接可以运行代码看效果: 代码: <!DOCTYPE html> <html lang="en"> <head> <meta ...