mybatis 中 foreach collection的用法小结(三种)

 更新时间:2017年10月15日 11:47:10   投稿:mrr  
这篇文章主要介绍了mybatis 中 foreach collection的用法小结(三种),需要的朋友可以参考下

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);

测试代码:

@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 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);

对应测试代码:

@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();
   }

总结

以上所述是小编给大家介绍的mybatis 中 foreach collection的用法小结(三种),希望对大家有所帮助!

相关文章

  • Java计时新姿势StopWatch的使用方法详解

    Java计时新姿势StopWatch的使用方法详解

    这篇文章主要给大家介绍了关于Java计时新姿势StopWatch的相关资料,以及java 中使用StopWatch来计算时间差的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • Spring Cloud Gateway 整合 knife4j 聚合接口文档功能

    Spring Cloud Gateway 整合 knife4j 聚合接口文档功能

    这篇文章主要介绍了Spring Cloud Gateway 整合 knife4j 聚合接口文档的相关知识,我们可以基于 Spring Cloud Gateway 网关 + nacos + knife4j 对所有微服务项目的接口文档进行聚合,从而实现我们想要的文档管理功能,需要的朋友可以参考下
    2022-02-02
  • Mybatis执行update失败的解决

    Mybatis执行update失败的解决

    这篇文章主要介绍了Mybatis执行update失败的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • zuul过滤器中转发请求头的解决方案

    zuul过滤器中转发请求头的解决方案

    这篇文章主要介绍了zuul过滤器中转发请求头的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • Java SpringBoot整合SpringCloud

    Java SpringBoot整合SpringCloud

    SpringCloud专注于为典型的用例和扩展机制提供良好的开箱即用体验,今天小编就带大家认识SpringCloud都有些什么特点,感兴趣的小伙伴留下来阅读全文吧
    2021-09-09
  • Java实现发送短信验证码+redis限制发送的次数功能

    Java实现发送短信验证码+redis限制发送的次数功能

    这篇文章主要介绍了Java实现发送短信验证码+redis限制发送的次数,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • Java(TM) Platform SE binary 打开jar文件的操作

    Java(TM) Platform SE binary 打开jar文件的操作

    这篇文章主要介绍了Java(TM) Platform SE binary 打开jar文件的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java多态用法与注意点实例分析

    Java多态用法与注意点实例分析

    这篇文章主要介绍了Java多态用法与注意点,结合实例形式分析了java多态相关的向上转型、向下转型、隐藏等相关操作技巧,需要的朋友可以参考下
    2019-08-08
  • 如何实现nohup java进程号一直在变方法步骤详解

    如何实现nohup java进程号一直在变方法步骤详解

    这篇文章主要为大家介绍了如何实现nohup java进程号一直在变方法步骤详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Java线程休眠_动力节点Java学院整理

    Java线程休眠_动力节点Java学院整理

    sleep() 的作用是让当前线程休眠,即当前线程会从“运行状态”进入到“休眠(阻塞)状态”。下面通过实例代码给大家介绍Java线程休眠的知识,需要的朋友参考下吧
    2017-05-05

最新评论