mybatis中动态sql foreach 批量处理的三种方式

本文详细解析了MyBatis框架中foreach元素的使用方法,包括其属性如item、index、open、close和collection,以及在不同场景下如何应用,如处理List、Array和Map类型的参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

foreach 作用是对一个集合进行遍历 通常用在构建IN条件语句

一、foreach属性

item: 集合中每个元素迭代时的别名,在list和array中是其中的对象, 在map中是value。
index: 指的是迭代过程中 迭代到的位置。在list和array中index是元素的序号,在map中是元素的key。
open: foreach开始符号,常用在in(),values() 时。
close: foreach结束符号,同上。
collection: 主要分3种情况:
1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可
list对象默认用list作为键,array对象默认用array作为键,map没有默认的键 也可以使用@Param(“keyName”)来设置键。

二、使用实例

1.传入单参数List

// mapper接口
List<Role> getRolesByRoleIds(@Param("roleIds") List<Integer> roleIds);
// mapper sql  注意collection
<select id="getRolesByRoleIds" parameterType="java.util.List" resultMap="roleInfo">
        SELECT role_id,role_name,valid FROM sys_role WHERE role_id IN 
        <foreach collection="roleIds" item="roleId" index="index" open="(" separator="," close=")">
            #{roleId}
        </foreach>
    </select>

2.传入单参数array (类似于list)

3.传入多参数封装为map

// 多参数封装为map
Map ids = new HashMap<>();
ids.put("userId", userId);
ids.put("roleIds",roleIds);
this.roleOfUserMapper.addRoleOfUserByIds(ids);
// mapper 接口
int addRoleOfUserByIds(Map ids);
// mybatis sql
<insert id="addRoleOfUserByIds" parameterType="java.util.HashMap">
        <selectKey keyProperty="serialNo" order="AFTER" resultType="java.lang.Integer">
            SELECT LAST_INSERT_ID()
        </selectKey>
        INSERT into sys_role_of_user(user_id, role_id, priority, start_date) VALUES
        <foreach collection="roleIds" item="roleId" separator=",">
           (#{userId},#{roleId},0,now())
        </foreach>
    </insert>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值