`

MyBatis的foreach查询(List、Array、Map)

阅读更多

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,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key

 

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

1.单参数List的类型

<!--List:forech中的collection属性类型是List,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
    <select id="getEmployeesListParams" resultType="Employees">
        SELECT * FROM employees e
        WHERE e.employee_id in
        <foreach collection="list" item="employeeId" index="index"
            open="(" close=")" separator=",">
            #{employeeId}
        </foreach>
    </select>

 

2.单参数array数组的类型

<!--Array:forech中的collection属性类型是array,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
    <select id="getEmployeesArrayParams" resultType="Employees">
        SELECT * FROM employees e
        WHERE e.employee_id in
        <foreach collection="array" item="employeeId" index="index"
            open="(" close=")" separator=",">
            #{employeeId}
        </foreach>
    </select>

 

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

 

<!--Map:不单单forech中的collection属性是map.key,其它所有属性都是map.key,比如下面的departmentId -->
    <select id="getEmployeesMapParams" resultType="Employees">
        SELECT *
        FROM employees e
        <where>
            <if test="departmentId!=null and departmentId!=''">
                e.department_id=#{departmentId}
            </if>
            <if test="employeeIdsArray!=null and employeeIdsArray.length!=0">
                AND e.employee_id in
                <foreach collection="employeeIdsArray" item="employeeId"
                    index="index" open="(" close=")" separator=",">
                    #{employeeId}
                </foreach>
            </if>
        </where>
    </select>

 

 

 

分享到:
评论

相关推荐

    测试mybatis里foreach用法

    在MyBatis中,`&lt;foreach&gt;`标签是一个非常重要的元素,它主要用于动态SQL语句的构建,尤其是在处理集合数据类型如List、Array、Map时。`&lt;foreach&gt;`标签的使用可以极大地提高代码的可读性和可维护性,避免了传统的字符...

    MyBatis传入集合 list 数组 map参数的写法

    在MyBatis中,处理集合参数如list、array以及map是非常常见的操作。这些参数通常用于构建动态SQL,特别是当需要在`IN`语句中使用多个值时。下面将详细解释如何在MyBatis中使用这些参数类型。 1. **List参数**: 当...

    详解mybatis foreach collection示例

    MyBatis foreach collection是一个非常强大的功能,它允许开发者动态构建In集合条件查询。该功能可以指定一个集合,声明集合项和索引变量,这些变量可以在元素体内使用。此外,该功能还允许开发者指定开放和关闭的...

    MyBatis中Foreach参数问题.doc

    当传入一个集合类型的参数时,MyBatis会将其封装成一个包含`collection`和`list`两个键的Map对象。具体实现如下: ```java private Object wrapCollection(Object object) { DefaultSqlSession.StrictMap map; if...

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

    情况三:传入的参数是多个时,我们需要把它们封装成一个 Map,collection 属性的值就是传入的 List 或 array 对象在自己封装的 Map 里面的 key。 foreach 语句是 MyBatis 中一个非常有用的语句,它可以帮助我们简洁...

    MyBatis的foreach语句详解

    MyBatis的`foreach`语句是其动态SQL功能中的一个重要组成部分,主要用于处理SQL语句中的循环和集合数据。在数据库操作中,特别是在构建`IN`条件时,`foreach`非常实用,它可以避免手动拼接SQL字符串,提高代码的...

    springmybatis

    mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...

    mybatis常用语句和lyaui 多条件查询加分页

    作为入参时,`List`对象默认使用`list`作为键,数组对象使用`array`作为键,Map对象需要自定义键。 ##### 3. 修改用户 - **接口定义**: ```java /** * 修改用户根据userId */ public int updateUsersById(Users...

    Mybatis框架 mapper.xml文件中parameterType传递参数常用的几种方式.pdf

    &lt;foreach collection="array" item="item" open="(" separator="," close=")"&gt; #{item} &lt;/foreach&gt; ``` 7. Mybatis中#和$的区别: Mybatis中的#{}和${}都是用来接收参数的,但它们在处理参数时有所不同: -...

    关于 MyBatis 我总结了 10 种通用的写法.docx

    如果传入的参数是多个,那么需要将它们封装成一个Map,然后collection属性值就是传入的List或array对象在自己封装的map里面的key。 4. choose标签的使用 choose标签是MyBatis中一个非常有用的标签,用于按顺序将...

    Mybatis 传输List的实现代码

    本文将详细讲解如何在 MyBatis 中实现通过 List 或 Array 传递参数来执行查询操作。 首先,当查询的参数只有一个,如一个 List&lt;Long&gt; 或 Long[],我们可以利用 MyBatis 的 `&lt;foreach&gt;` 标签来遍历集合。下面以 `...

    MyBatis 深入浅出-动态SQL

    &lt;foreach item="item" index="index" collection="array" open="(" separator="," close=")"&gt; #{item} &lt;/foreach&gt; ``` - **当传入参数是多个时,需要将它们封装成一个Map**: ```xml ...

    mybatis中批量插入的两种方式(高效插入)

    - `collection`: 必须指定,用于确定集合来源,可能是`list`、`array` 或者在多参数情况下封装的`Map`。 - `open`: SQL语句的开始字符。 - `separator`: 每次迭代之间的分隔符。 - `close`: SQL语句的结束字符。 ...

    MyBatis动态标签.pdf

    MyBatis是一个优秀的持久层框架,它支持定制化的SQL查询、结果映射及高级映射等功能。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程。MyBatis可以通过简单的XML或注解来进行配置和原始映射,...

    MyBatis批量插入(insert)数据操作

    `foreach`标签是MyBatis提供的循环构造SQL语句的工具,它可以迭代任何集合类型的数据,包括List、Set等。`collection`属性的值取决于传入参数的类型,例如: - 如果是List,`collection`应为`list` - 如果是数组...

    详解MyBatis 常用写法

    其中,collection传入的List或Array或自己封装的Map;item是集合中元素迭代时的别名;index是集合中元素迭代的索引;open是where后面表示以什么开始,如以‘('开始;separator是表示在每次进行迭代时的分隔符;...

    Mybatis数据批量插入如何实现

    &lt;foreach collection="list" item="User" index="index" separator=","&gt; ( #{User.username}, #{User.birthday}, #{User.sex}, #{User.address} ) &lt;/foreach&gt; ``` 在上面的示例中,我们使用foreach标签来...

    MyBatis批量插入数据过程解析

    在这个示例中,我们使用了foreach标签来迭代List集合,并将每个元素插入到数据库中。 对于foreach标签的collection属性,需要根据不同的情况进行设置。如果传入的是单参数且参数类型是一个List的时候,collection...

    7.深圳各公司JAVA面试题综合

    - List、Set、Map接口:理解它们的特点,如ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap的实现和使用。 - 集合的遍历方式:foreach循环、迭代器和ListIterator的区别。 - 集合与数组的转换:掌握...

Global site tag (gtag.js) - Google Analytics