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>`标签是一个非常重要的元素,它主要用于动态SQL语句的构建,尤其是在处理集合数据类型如List、Array、Map时。`<foreach>`标签的使用可以极大地提高代码的可读性和可维护性,避免了传统的字符...
在MyBatis中,处理集合参数如list、array以及map是非常常见的操作。这些参数通常用于构建动态SQL,特别是当需要在`IN`语句中使用多个值时。下面将详细解释如何在MyBatis中使用这些参数类型。 1. **List参数**: 当...
MyBatis foreach collection是一个非常强大的功能,它允许开发者动态构建In集合条件查询。该功能可以指定一个集合,声明集合项和索引变量,这些变量可以在元素体内使用。此外,该功能还允许开发者指定开放和关闭的...
当传入一个集合类型的参数时,MyBatis会将其封装成一个包含`collection`和`list`两个键的Map对象。具体实现如下: ```java private Object wrapCollection(Object object) { DefaultSqlSession.StrictMap map; if...
情况三:传入的参数是多个时,我们需要把它们封装成一个 Map,collection 属性的值就是传入的 List 或 array 对象在自己封装的 Map 里面的 key。 foreach 语句是 MyBatis 中一个非常有用的语句,它可以帮助我们简洁...
MyBatis的`foreach`语句是其动态SQL功能中的一个重要组成部分,主要用于处理SQL语句中的循环和集合数据。在数据库操作中,特别是在构建`IN`条件时,`foreach`非常实用,它可以避免手动拼接SQL字符串,提高代码的...
mybatis实战教程mybatis in action之四实现关联数据的查询 mybatis实战教程mybatis in action之五与spring3集成附源码 mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action...
作为入参时,`List`对象默认使用`list`作为键,数组对象使用`array`作为键,Map对象需要自定义键。 ##### 3. 修改用户 - **接口定义**: ```java /** * 修改用户根据userId */ public int updateUsersById(Users...
<foreach collection="array" item="item" open="(" separator="," close=")"> #{item} </foreach> ``` 7. Mybatis中#和$的区别: Mybatis中的#{}和${}都是用来接收参数的,但它们在处理参数时有所不同: -...
如果传入的参数是多个,那么需要将它们封装成一个Map,然后collection属性值就是传入的List或array对象在自己封装的map里面的key。 4. choose标签的使用 choose标签是MyBatis中一个非常有用的标签,用于按顺序将...
本文将详细讲解如何在 MyBatis 中实现通过 List 或 Array 传递参数来执行查询操作。 首先,当查询的参数只有一个,如一个 List<Long> 或 Long[],我们可以利用 MyBatis 的 `<foreach>` 标签来遍历集合。下面以 `...
<foreach item="item" index="index" collection="array" open="(" separator="," close=")"> #{item} </foreach> ``` - **当传入参数是多个时,需要将它们封装成一个Map**: ```xml ...
- `collection`: 必须指定,用于确定集合来源,可能是`list`、`array` 或者在多参数情况下封装的`Map`。 - `open`: SQL语句的开始字符。 - `separator`: 每次迭代之间的分隔符。 - `close`: SQL语句的结束字符。 ...
MyBatis是一个优秀的持久层框架,它支持定制化的SQL查询、结果映射及高级映射等功能。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的过程。MyBatis可以通过简单的XML或注解来进行配置和原始映射,...
其中,collection传入的List或Array或自己封装的Map;item是集合中元素迭代时的别名;index是集合中元素迭代的索引;open是where后面表示以什么开始,如以‘('开始;separator是表示在每次进行迭代时的分隔符;...
`foreach`标签是MyBatis提供的循环构造SQL语句的工具,它可以迭代任何集合类型的数据,包括List、Set等。`collection`属性的值取决于传入参数的类型,例如: - 如果是List,`collection`应为`list` - 如果是数组...
<foreach collection="list" item="User" index="index" separator=","> ( #{User.username}, #{User.birthday}, #{User.sex}, #{User.address} ) </foreach> ``` 在上面的示例中,我们使用foreach标签来...
在这个示例中,我们使用了foreach标签来迭代List集合,并将每个元素插入到数据库中。 对于foreach标签的collection属性,需要根据不同的情况进行设置。如果传入的是单参数且参数类型是一个List的时候,collection...
- List、Set、Map接口:理解它们的特点,如ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap的实现和使用。 - 集合的遍历方式:foreach循环、迭代器和ListIterator的区别。 - 集合与数组的转换:掌握...