mybatis的参数传入集合

本文介绍了如何在MyBatis中处理参数传递集合的两种情况:一是使用Map传入包含List的参数,解释了`collection`属性在XML映射文件中的作用;二是展示了在插入操作中正确传入List的写法,分析了错误写法的问题并提供修正方案。

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

1.select中传入map,map中包含list

后台代码:

List<String> bhList = ztryArchivesMapper.queryZjbhsByQcd(queryMap);
paramsMap.put("bhList", bhList);
		
PageHelper.startPage(pageNum, pageSize);
List<Ztry> list = ztryMapper.queryZtryListByCondition(paramsMap);

xml种的代码:

<if test="bmList != null and bmList.size != 0">
  AND zjhm in 
 <foreach close=")" collection="bmList" item="listItem" open="(" separator=",">
    #{listItem}
 </foreach>
</if>

解释:collection对应的就是map种list的key。

2.insert中传入list

xml中错误的写法:

<insert id="insertGz" parameterType="java.util.Map">
    insert into ${tableName} (user_id,field_id)
    values
	<foreach item="item" collection="ids" index="index" open="(" separator="," close=")">
		#{userId,jdbcType=VARCHAR},#{item,jdbcType=VARCHAR}
	</foreach>
 </insert>

这样写是不对的,我们想要的SQL语句是:

insert into table_name (user_id,field_id) values (1,2),(1,2),(1,2)

而上面这种会得到这样的结果:

insert into table_name (user_id,field_id) values (1,2,1,2,1,2)。

因为在foreach标签中的open和close都是针对循环体中的内容。

所以我们修改为正确的写法是:

 

  <insert id="insertGz" parameterType="java.util.Map">
    insert into ${tableName} (user_id,field_id)
    values
	<foreach item="item" collection="ids" index="index"  separator=",">
		(#{userId,jdbcType=VARCHAR},#{item,jdbcType=VARCHAR})
	</foreach>
  </inser

后端代码是:

Map<String,Object> params = new HashMap<String,Object>();
params.put("tableName", "tb_user_clue");
params.put("userId", userId);
params.put("ids", Arrays.asList(ids.split(",")));
gzArchivesService.insertGz(params);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值