mybatis 传递list集合、set集合、数组与foreach、in的用法

2 篇文章 1 订阅
1 篇文章 0 订阅

参考链接:https://www.cnblogs.com/fangyu19900812/p/6046209.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. 如果如果传入的是单参数且参数类型是一个Set集合的时候,collection的属性值不知道是什么,
   遇到这种不知道的情况可以通过注解`@Param("set")`指定key值
4. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,
   实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,
   所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key 

下面分别来看看上述三种情况的示例代码:

1.单参数List的类型:

mybatis映射接口类:

    /**
     * 
    * @Title: deleteByFormIds
    * @Description: TODO(根据id集合删除表单)
    * @return int    返回类型
    * @param formStyleIds
    * @return
    * */
     //默认就是list
    int deleteByFormIds(@Param("list") List<Integer> formStyleIds);
}

mybatis映射文件:

 <delete id="deleteByFormIds" parameterType="java.util.List">
    DELETE 
    FROM
        form_style_tab 
    WHERE
        <choose>
            <when test="list !=null and list.size()>0">
                form_style_id in 
                <foreach item="formStyleId" index="index" collection="list" open="(" separator="," close=")">  
                    #{formStyleId, jdbcType=INTEGER}  
                </foreach>
            </when>
            <otherwise>
                0 = 1
            </otherwise>
        </choose>
  </delete>

2.单参数Set的类型

mybatis映射接口类:

    /**
     * 
    * @Title: deleteByFormIds
    * @Description: TODO(根据id集合删除表单)
    * @return int    返回类型
    * @param formStyleIds
    * @return
     */
    int deleteByFormIds(@Param("set") Set<Integer> formStyleIds);
}

mybatis映射文件:

 <delete id="deleteByFormIds" parameterType="java.util.Set">
    DELETE 
    FROM
        form_style_tab 
    WHERE
        <choose>
            <when test="set !=null and set.size()>0">
                form_style_id in 
                <foreach item="formStyleId" index="index" collection="set" open="(" separator="," close=")">  
                    #{formStyleId, jdbcType=INTEGER}  
                </foreach>
            </when>
            <otherwise>
                0 = 1
            </otherwise>
        </choose>
  </delete>

3.单参数array数组的类型

mybatis映射接口类:

    /**
     * 
    * @Title: deleteByFormIds
    * @Description: TODO(根据id集合删除表单)
    * @return int    返回类型
    * @param formStyleIds
    * @return
    * */
     //默认就是list
    int deleteByFormIds(@Param("array") Integer[] formStyleIds);
}

mybatis映射文件:

 <delete id="deleteByFormIds" parameterType="java.util.List">
    DELETE 
    FROM
        form_style_tab 
    WHERE
        <choose>
            <when test="array !=null and array.length>0">
                form_style_id in 
                <foreach item="formStyleId" index="index" collection="array" open="(" separator="," close=")">  
                    #{formStyleId, jdbcType=INTEGER}  
                </foreach>
            </when>
            <otherwise>
                0 = 1
            </otherwise>
        </choose>
  </delete>

4.自己把参数封装成Map或者bean的类型

mybatis映射接口类:

public List dynamicForeach3Test(Map params);

mybatis映射文件:

<select id="dynamicForeach3Test" parameterType="java.util.HashMap" 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>
  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值