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

 更新时间:2021年09月11日 09:34:26   作者:luffy5459  
这篇文章主要介绍了mybatis条件语句中带数组参数的处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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入参的键。

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

mapper接口

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

mapper.xml的配置

<insert id="batchDelete">
     delete from T_ACT_USERS where ACTIVITY_ID = #{activityId}
     and USER_ID in
     <foreach collection="userIds" item="item" index="index" open="(" separator="," close=")">
            #{item}
     </foreach>
</insert>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • springboot项目中jacoco服务端部署使用

    springboot项目中jacoco服务端部署使用

    这篇文章主要为大家介绍了springboot项目中jacoco服务端部署使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • spring 或者spring boot 调整bean加载顺序的方式

    spring 或者spring boot 调整bean加载顺序的方式

    这篇文章主要介绍了spring 或者spring boot 调整bean加载顺序的方式,本文通过实例代码讲解三种调整类加载顺序的方式,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • mybatis-plus使用@EnumValue处理枚举类型的示例代码

    mybatis-plus使用@EnumValue处理枚举类型的示例代码

    这篇文章主要介绍了mybatis-plus使用@EnumValue处理枚举类型的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Spring IOC基于注解启动示例详析

    Spring IOC基于注解启动示例详析

    这篇文章主要给大家介绍了Spring IOC基于注解启动的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • Mybatis plus实现Distinct去重功能

    Mybatis plus实现Distinct去重功能

    这篇文章主要介绍了Mybatis plus实现Distinct去重功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • IDEA中Spring项目的工程构建

    IDEA中Spring项目的工程构建

    这篇文章主要介绍了IDEA中Spring项目的工程构建,Spring框架是轻量级的JavaEE框架,可以解决企业应用开发的复杂性,有两个核心部分:IOC和Aop,今天来学习如何构建spring项目,需要的朋友可以参考下
    2023-05-05
  • SpringBoot整合Solr实现文档检索

    SpringBoot整合Solr实现文档检索

    Solr高度可靠、可扩展和容错,提供分布式索引、复制和负载平衡查询、自动故障转移和恢复、集中配置等,Solr 为世界上许多最大的 Internet 站点的搜索和导航功能提供支持,本文将给大家介绍SpringBoot整合Solr实现文档检索,需要的朋友可以参考下
    2023-08-08
  • JAVA Optional类用法分享

    JAVA Optional类用法分享

    本篇文章主要给大家分析了JAVA中Optional类用法以及代码分析,跟着小编学习下吧。
    2017-12-12
  • Java并发系列之AbstractQueuedSynchronizer源码分析(共享模式)

    Java并发系列之AbstractQueuedSynchronizer源码分析(共享模式)

    这篇文章主要为大家详细介绍了Java并发系列之AbstractQueuedSynchronizer源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-02-02
  • 详解基于java的Socket聊天程序——客户端(附demo)

    详解基于java的Socket聊天程序——客户端(附demo)

    这篇文章主要介绍了详解基于java的Socket聊天程序——客户端(附demo),客户端设计主要分成两个部分,分别是socket通讯模块设计和UI相关设计。有兴趣的可以了解一下。
    2016-12-12

最新评论