[MyBatis] foreach collection用法

foreach一般在使用在SQL语句的IN条件中,目的是确认某个字段是否在目的范围内。在SQL开发过程中,动态构建In集合条件查询是比较常见的用法,在Mybatis中提供了foreach功能,该功能比较强大,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内。它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然地附加多余的分隔符。

格式为

WHERE A_DB.a IN
<foreach collection="集合类型" index="" item="集合别名" open="开始符" separator="分隔符" close="结束符">
    #{别名}
</foreach>

参数为:

collection:指定集合类型,参数为list,array,map的key名,也可以填写函数的参数名,mybatis会自动转化为对应类型

index:当前迭代次数,当循环到第i个元素时,此时index=i

item:循环体中的对象,可以进行路径访问,例如item.a,item.a.b,如果是array类型直接访问元素,如果是map类型指代value

open:开始字符,一般为(

separator:分隔符,一般为,

close:结束字符,一般为)

注意:可以将任何可迭代对象(如列表、集合等)和任何的字典或者数组对象传递给foreach作为集合参数。当使用可迭代对象或者数组时,index是当前迭代的次数,item的值是本次迭代获取的元素。当使用字典(或者Map.Entry对象的集合)时,index是键,item是值。

1.当参数为array,list,map时,常规用法,按照上述格式使用,

2.当有多个参数时,讲多个参数打包为map方式,collection处的ids为map的key名称,item为value

findByIds(String name,int[] ids);
Map<String, Object> params = new HashMap<String, Object>(2);
params.put("name", name);
params.put("ids", ids);
mapper.findByIdsMap(params);
<select id="dynamicForeach3Test" resultType="Blog">  
    select * from table where id in  
    <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">  
        #{item}  
    </foreach>  
</select>  

3.当参数为一个对象时,直接讲collection置为元素名

class student{
    int[] ids;
    String class;
}
<foreach item="id" collection="ids">
</foreach >

在网上看到一个index用法解释https://blog.csdn.net/liudongdong0909/article/details/53838246

index可解决业务需要设置sort字段的问题,sort用于保留原集合的排列顺序

<insert id="batchInsertSelective" parameterType="list">
    insert into
      proc_pre_item (proc_tempt_id, type_id, sort, create_user, create_date)
    values
    <foreach collection="list" separator="," item="preItem" index="idx">
        (
            #{preItem.procTemptId,jdbcType=BIGINT},
            #{preItem.typeId,jdbcType=BIGINT},
            #{idx},
            #{preItem.createUser,jdbcType=BIGINT},
            #{preItem.createDate,jdbcType=TIMESTAMP}
        )
    </foreach>
</insert>

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值