mybatis条件语句中带数组参数的处理

网友投稿 821 2022-12-09

mybatis条件语句中带数组参数的处理

mybatis条件语句中带数组参数的处理

目录mybatis条件语句中带数组参数这里给出一个示例这里有必要说明的是foreach标签中的collection属性mybatis多参数传递(其中包括数组)mapper接口mapper.xml的配置

mybatis条件语句中带数组参数

如题,在mybatis编写sql语句的时候,可能会遇到in这样的关键字,我们知道in后面需要接上('a','b','c')这样的一个结构。它像一个数组,但是是用括号()包裹的,参数之间还有逗号隔开。

这里因为数组参数是变量,直接通过拼接的方式不可行。

这里需要一个标签foreach,标签可以有item,collection,open,close,separator等属性,分别表示变量,变量集合,开始符号,结束符号,分隔符MiZdAyhEjn。

这里给出一个示例

定义返回对象

编写sql语句

select * from users

where id in

#{id,jdbcType=BIGINT}

定义dao方法

package com.xxx.springmybatis.dao;

import java.util.List;

import com.xxx.springmybatis.domain.User;

public interface UserMapper {

User getById(Integer id);

User getByName(String name);

void save(User user);

List findByIds(List ids);

}

以上的示例,是通过id数组来查询对应的用户集合。我们传入的用户ID,最终在sql中会通过拼接的方式组成where id in (3,4)的条件。

如下所示,如果要查询id为3,4的用户,那么打印的sql语句可以看出拼接的样子:

这里有必要说明的是foreach标签中的collection属性

1、List集合,默认使用list代表入参,数组,默认使用array作为入参。

2、如果传入的参数是一个对象,对象User有个属性List ids,那么就使用ids作为入参。

3、如果接口声明的地方通过注解@Param("xx")指定了入参,那么list,array这种默认的参数就失效,这时候需要指定xx为入参。

本例中因为使用的是List集合传入,所以默认就使用了list作为collection入参的键。

mybatis多参数传递(其中包括数组)

mapper接口

public void batchDelete(@Param(value = "activityId") Integer activityId, @Param(value = "userIds") Integer[] userIds);

mapper.xml的配置

delete from T_ACT_USERS where ACTIVITY_ID = #{activityId}

and USER_ID in

#{item}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:springboot 启动项目打印接口列表的实现
下一篇:SpringBoot@Aspect 打印访问请求和返回数据方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~