mybatis条件语句中带数组参数

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

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

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

    这里给出一个示例:

  定义返回对象

<resultMap type="com.xxx.springmybatis.domain.User" id="UserResult">
		<id column="id" jdbcType="BIGINT" property="id"/>
		<result column="name" jdbcType="VARCHAR" property="name"/>
		<result column="email" jdbcType="VARCHAR" property="email"/>
</resultMap>

编写sql语句

<select id="findByIds" resultMap="UserResult" parameterType="list">
    	select * from users
    	where id in
    	<foreach collection="list" item="id" open="(" close=")" separator=",">
    	 #{id,jdbcType=BIGINT}
    	</foreach>
</select>

 定义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<User> findByIds(List<Integer> 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入参的键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值