oreach的主要用在构建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);
测试代码:
           @Test
       public 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);
对应的测试代码:
           @Test
       public 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 tit le 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);
对应测试代码:
           @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);
                 f or (Blog blog : blogs)
                         System.out.println(blog);
                 session.close();
         }

mybatis 中 foreach collection的三种用法相关推荐

  1. mybatis 传入参数及其 foreach collection的三种用法

    参考: 既然琴瑟起 https://www.cnblogs.com/qiankun-site/p/5762380.html V青山绿水  http://www.cnblogs.com/ruiati/p ...

  2. java里break的使用方法_Java中break的第三种用法说明

    在Java中,break语句有三种用法,第一种是用于终止switch语句中的语句序列,第二种是用于退出循环,然而第三种是用作goto语句的"文明"形式! 我们知道,goto语句会破 ...

  3. Python扩展库numpy中where()函数的三种用法

    第一种用法:只给where()函数传递一个数组作为参数,返回其中非0元素的下标. 第二种用法:给where()函数传递一个包含True/False值的数组,返回该数组中True值的下标,结合numpy ...

  4. Java中的this关键字(三种用法)

    this关键字的三种用法: 通过this关键字可以明确的访问一个类的成员变量,解决成员变量与局部变量名称冲突问题. 实例: public class Student {//定义四个成员变量String ...

  5. kotlin中when表达式的三种用法

    这个是一个开头 我们都知道,在kotlin中可以用when表达式来替换if else表达式来使用,比如如下代码: if (count == 42) {println("I have the ...

  6. mysql里collection_foreach中collection的三种用法

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

  7. java中break什么意思_Java中break的第三种用法说明

    在Java中,break语句有三种用法,第一种是用于终止switch语句中的语句序列,第二种是用于退出循环,然而第三种是用作goto语句的"文明"形式! 我们知道,goto语句会破 ...

  8. java this()函数_java中this关键字的三种用法

    this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. this的用法在java中大体可以分为3种: 1.普通的直接引用,this相当于是指向当前对象本身. 2.形参与成员名字重 ...

  9. python海象运算符_Python 中海象运算符的三种用法

    首发于微信公众号:<Python编程时光> 系列导读 Python 版本发展非常快,如今最新的版本已经是 Pyhton 3.9,即便如此,有很多人甚至还停留在 3.6 或者 3.7,连 3 ...

最新文章

  1. AdminLTE的使用
  2. 前端资源整理 - 订阅、工具等
  3. Android IOS WebRTC 音视频开发总结(三八)-- tx help
  4. ffmpeg遇到inttypes.h和UINT64_C
  5. jq查找字段忽略html标签,jquery内容过滤选择器有哪些?
  6. 第一百三十节,JavaScript,封装库--连缀
  7. MYSQL 时间计算的 3 种函数
  8. KPI在小型产品团队中的实践
  9. ​Cell:粟硕/施莽团队利用宏转录组揭示“野味”动物携带和人类疾病密切相关的多种病毒...
  10. linux logcat阻塞,同时使用logcat的在Linux中
  11. NB-ioT的工作状态和工作模式
  12. 球体积公式计算4/3PIr*r*r,编写一个程序输入半径,求体积
  13. android-腾讯街景已经百度街景对比
  14. MATLAB神经网络工具箱(简单操作介绍)
  15. 天嵌通途B210和USRP B210性能对比实验
  16. matlab小课堂2
  17. 【UV打印机】RYPC打印软件教程(三)-参数设置
  18. canvas图形放大缩小鼠标拖拽
  19. Java类的初始化、变量的初始化
  20. I2C + 漏极开路与推挽输出

热门文章

  1. 删除U盘作为启动盘的隐藏启动分区
  2. KVM安装Win系列虚拟机学习笔记
  3. RHEL4- DNS服务(四)DNS的开机自动启动控制
  4. android 解决Date.gettimezoneoffset已经废弃
  5. django crm 03
  6. Java并发编程—如何取消定时任务
  7. 正则表达式注意事项以及常用方法
  8. 从零打造在线网盘系统之Hibernate查询与更新技术
  9. ASP.NET Core - Razor页面之Handlers处理方法
  10. 6大设计模式(4):接口隔离原则