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

参考链接: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 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 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>

你可能感兴趣的:(mybatis,foreach,in)