MyBatis传入集合 list 数组 map参数的写法

 更新时间:2016年06月26日 15:23:52   作者:aliveClass  
这篇文章主要介绍了MyBatis传入集合 list 数组 map参数的写法的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:
如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .

如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .

如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.

下面我们通过代码实践:

数据表:

采用Oracle的HR.Employees表

        实体:Employees

public class Employees {
  private Integer employeeId;
  private String firstName;
  private String lastName;
  private String email;
  private String phoneNumber;
  private Date hireDate;
  private String jobId;
  private BigDecimal salary;
  private BigDecimal commissionPct;
  private Integer managerId;
  private Short departmentId;
} 

映射文件:

 

  <!--List:forech中的collection属性类型是List,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
  <select id="getEmployeesListParams" resultType="Employees">
    select *
    from EMPLOYEES e
    where e.EMPLOYEE_ID in
    <foreach collection="list" item="employeeId" index="index"
      open="(" close=")" separator=",">
      #{employeeId}
    </foreach>
  </select>
  <!--Array:forech中的collection属性类型是array,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
  <select id="getEmployeesArrayParams" resultType="Employees">
    select *
    from EMPLOYEES e
    where e.EMPLOYEE_ID in
    <foreach collection="array" item="employeeId" index="index"
      open="(" close=")" separator=",">
      #{employeeId}
    </foreach>
  </select>

  <!--Map:不单单forech中的collection属性是map.key,其它所有属性都是map.key,比如下面的departmentId -->
  <select id="getEmployeesMapParams" resultType="Employees">
    select *
    from EMPLOYEES e
    <where>
      <if test="departmentId!=null and departmentId!=''">
        e.DEPARTMENT_ID=#{departmentId}
      </if>
      <if test="employeeIdsArray!=null and employeeIdsArray.length!=0">
        AND e.EMPLOYEE_ID in
        <foreach collection="employeeIdsArray" item="employeeId"
          index="index" open="(" close=")" separator=",">
          #{employeeId}
        </foreach>
      </if>
    </where>
  </select>

Mapper类:

public interface EmployeesMapper { 
  List<Employees> getEmployeesListParams(List<String> employeeIds);
  List<Employees> getEmployeesArrayParams(String[] employeeIds);
  List<Employees> getEmployeesMapParams(Map<String,Object> params);
}

以上所述是小编给大家介绍的MyBatis传入集合 list 数组 map参数的写法的全部叙述,希望对大家有所帮助!

相关文章

  • Java开发实现的Socket双向通信功能示例

    Java开发实现的Socket双向通信功能示例

    这篇文章主要介绍了Java开发实现的Socket双向通信功能,结合实例形式分析了java基于socket实现的服务器端与客户端双向通信相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • Spring Cloud 配置中心多环境配置bootstrap.yml的实现方法

    Spring Cloud 配置中心多环境配置bootstrap.yml的实现方法

    spring cloud用上了配置中心,就一个boostrap.yml,本文就来介绍一下Spring Cloud 配置中心多环境配置bootstrap.yml的实现方法,感兴趣的可以了解一下
    2024-03-03
  • Java代码读取文件缓存问题解决

    Java代码读取文件缓存问题解决

    最近遇到了一个Java文件读取的缓存问题,打远程断点出现的也是原来的老代码参数,本文就介绍一下解决方法,感兴趣的可以了解一下
    2021-05-05
  • JDK1.7的ConcurrentHashMap源码解析

    JDK1.7的ConcurrentHashMap源码解析

    这篇文章主要介绍了JDK1.7的ConcurrentHashMap源码解析,HashMap是非线程安全的,而HashTable是线程安全的,但是HashTable实现同步的方法比较暴力,即在所有的方法体上添加synchronized关键字,需要的朋友可以参考下
    2023-12-12
  • mybatis-plus无法通过logback-spring输出的解决方法

    mybatis-plus无法通过logback-spring输出的解决方法

    本文主要介绍了mybatis-plus无法通过logback-spring输出,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • java仿QQ连连看游戏

    java仿QQ连连看游戏

    这篇文章主要为大家详细介绍了java仿QQ连连看游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • java.nio.file.WatchService 实时监控文件变化的示例代码

    java.nio.file.WatchService 实时监控文件变化的示例代码

    在 Java 语言中,从 JDK7 开始,新增了java.nio.file.WatchService类,用来实时监控文件的变化,这篇文章主要介绍了java.nio.file.WatchService 实时监控文件变化,需要的朋友可以参考下
    2022-05-05
  • MybatisPlusInterceptor实现sql拦截器超详细教程

    MybatisPlusInterceptor实现sql拦截器超详细教程

    这篇文章主要给大家介绍了关于MybatisPlusInterceptor实现sql拦截器超详细教程的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Java中==与equals()及hashcode()三者之间的关系详解

    Java中==与equals()及hashcode()三者之间的关系详解

    最近也是在读Hollis的《深入理解Java核心技术》里面一节讲到了equals()和hashcode()的关系,对于这个高频面试点,咱们需要认真理清一下几者之间的关系
    2022-10-10
  • 解决SpringBoot在后台接收前台传递对象方式的问题

    解决SpringBoot在后台接收前台传递对象方式的问题

    这篇文章主要介绍了解决SpringBoot在后台接收前台传递对象方式的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01

最新评论