首页 > 其他分享 >mybatis 中 foreach collection的三种用法

mybatis 中 foreach collection的三种用法

时间:2024-07-12 19:23:53浏览次数:11  
标签:collection blog item 参数 foreach mybatis array

转载:http://blog.sina.com.cn/s/blog_b0d90e8c0102v1q1.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" 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>
 7 或者 分隔符(or)
 8 
 9 UPDATE t_enterprise
10 SET DELETE_FLAG = '0'
11 WHERE
12 <foreach collection="list" item="item" open="" close="" separator="OR">
13     ID=#{item.id}
14 </foreach>

上述collection的值为list,对应的Mapper是这样的

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

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

上述collection为array,对应的Mapper代码:

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

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

上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:

标签:collection,blog,item,参数,foreach,mybatis,array
From: https://www.cnblogs.com/joe-tang/p/7221681.html

相关文章

  • MyBatis的ResultMap使用方法,对象关联写法
     MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里......
  • resultMap之collection聚集
     聚集元素用来处理“一对多”的关系。需要指定映射的Java实体类的属性,属性的javaType(一般为ArrayList);列表中对象的类型ofType(Java实体类);对应的数据库表的列名称;不同情况需要告诉MyBatis如何加载一个聚集。MyBatis可以用两种方式加载:1.select:执行一个其它映射的SQL语句返回......
  • MyBatis用嵌套ResultMap实现一对多映射
    背景我们知道,MyBatis可以很方便地把SQLselect出来的数据直接映射为对象的属性,把对象取出来。但是,有些对象的属性是集合类型,集合里保存的是数个其他类型的对象。如何用MyBatis把它取出来呢?例子以以下这个应用场景为例:一个教师对应多个课程。数据结构如下:publicclassCour......
  • Mybatis模糊查询MySQL中记录的的常用三种方法
    mybatis的模糊查询功能使用的很广泛,以MySQL数据库为例(不同的数据库,有些可能不支持) 常用的模糊查询有三种方法:直接使用%拼接字符串,如 '%'#{name}'%' 或 "%"#{name}"%",单引号或双引号都可以。(或者  '%${vendorId}%' )<iftest="vendorId!=nullandvendorId!=......
  • Mybatis association与collection的区别
    mybatisassociation与collection的区别:一、一对一 association通常用来映射一对一的关系1<resultMaptype="cn.itcast.mybatis.po.Orders"id="OrdersUserResultMap">23<!--配置映射的订单信息-->4<idcolumn="id"prope......
  • mybatis动态Sql(where)和sql片段
    sql片段的定义;1<sqlid="condition">2<iftest="entity.dicttype!=null">and`dicttype`=#{entity.dicttype}</if>3<iftest="entity.dictname!=nullandentity.dictname!=''......
  • 【Springboot】玩转复杂单元测试启动类-只测试数据访问层(JPA+Mybatis) 和服务层 以及
    上一篇文章写了一个最复杂的SpringBootTest启动类,定制化程序奇高,然而有时候仅测试JPA是不够的。启动类需求:测试SpringDataJPA测试Mybatis从容器中获得ObjectMapper测试单独的Service使用TestNG或者使用Junit阻止Dubbo、Kafka、ElasticSearch等中间件启动使用appl......
  • 易优cms网站for功能:数据/记录循环输出标签(注:类似与volist、foreach标签)-Eyoucms
    【基础用法】名称:for功能:数据/记录循环输出标签(注:类似与volist、foreach标签)语法:{eyou:forstart='开始值'end='结束值'}{$i}{/eyou:for}php解析后的代码是:for($i=1;$i<100;$i+=1){echo$i;}参数:start=''开始值end=''结束值comparison=''比较操作符,默认是小于......
  • 易优cms网站foreach功能:数据/记录循环输出标签(注:类似与volist标签,只是更加简单,没有太
    【基础用法】名称:foreach功能:数据/记录循环输出标签(注:类似与volist标签,只是更加简单,没有太多额外的属性。)语法:{eyou:channeltype='top'}{eyou:foreachname='$field.children'item='field1'}<ahref='{$field1.typeurl}'>{$field1.typename}</a>{/eyou:......
  • Mybatis-Plus最优化持久层开发
    Mybatis-plus:最优化持久层开发一:Mybatis-plus快速入门:1.1:简介:Mybatis-plus(简称MP)是一个Mybatis的增强工具,在mybatis的基础上只做增强不做改变;提高效率;自动生成单表的CRUD功能;提供了丰富的条件拼接方式;全自动ORM类型持久层框架;(不仅提供数据库操作的方法,还会提供sql语句......