1.foreach简单介绍:

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

foreach元素的属性主要有item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名,

index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,

open表示该语句以什么开始,

separator表示在每次进行迭代之间以什么符号作为分隔符,

close表示以什么结束,

collection属性是在使用foreach的时候最关键的也是最容易出错的,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,主要有一下3种情况:

(1)如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .

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

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

(4)如果传入的是单个参数且参数类型为List的时候,使用@Param()注释参数名字,那么collection属性值为参数名字。例:[2]

Dao:

List<User> findListByIds(@Param("idList")List<String> idList);

XML

<select id="findListByIds" parameterType="java.util.List" resultType="User">
select * from t_user where id in
<foreach item="item" index="index" collection="idList" open="(" separator="," close=")">
#{item}
</foreach>
</select>

2.实践-实体类

[java] view plain copy
  1. public class Employees {
  2. private Integer employeeId;
  3. private String firstName;
  4. private String lastName;
  5. private String email;
  6. private String phoneNumber;
  7. private Date hireDate;
  8. private String jobId;
  9. private BigDecimal salary;
  10. private BigDecimal commissionPct;
  11. private Integer managerId;
  12. private Short departmentId;
  13. }

3.实践-XML

[html] view plain copy
  1. <!--List:forech中的collection属性类型是List,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
  2. <select id="getEmployeesListParams" resultType="Employees">
  3. select *
  4. from EMPLOYEES e
  5. where e.EMPLOYEE_ID in
  6. <foreach collection="list" item="employeeId" index="index"
  7. open="(" close=")" separator=",">
  8. #{employeeId}
  9. </foreach>
  10. </select>
  11. <!--Array:forech中的collection属性类型是array,collection的值必须是:list,item的值可以随意,Dao接口中参数名字随意 -->
  12. <select id="getEmployeesArrayParams" resultType="Employees">
  13. select *
  14. from EMPLOYEES e
  15. where e.EMPLOYEE_ID in
  16. <foreach collection="array" item="employeeId" index="index"
  17. open="(" close=")" separator=",">
  18. #{employeeId}
  19. </foreach>
  20. </select>
  21. <!--Map:不单单forech中的collection属性是map.key,其它所有属性都是map.key,比如下面的departmentId -->
  22. <select id="getEmployeesMapParams" resultType="Employees">
  23. select *
  24. from EMPLOYEES e
  25. <where>
  26. <if test="departmentId!=null and departmentId!=''">
  27. e.DEPARTMENT_ID=#{departmentId}
  28. </if>
  29. <if test="employeeIdsArray!=null and employeeIdsArray.length!=0">
  30. AND e.EMPLOYEE_ID in
  31. <foreach collection="employeeIdsArray" item="employeeId"
  32. index="index" open="(" close=")" separator=",">
  33. #{employeeId}
  34. </foreach>
  35. </if>
  36. </where>
  37. </select>

4.实践-Mapper

[java] view plain copy
  1. public interface EmployeesMapper {
  2. List<Employees> getEmployeesListParams(List<String> employeeIds);
  3. List<Employees> getEmployeesArrayParams(String[] employeeIds);
  4. List<Employees> getEmployeesMapParams(Map<String,Object> params);
  5. }
原文出处:
[1] zhangqifeng92, MyBatis传入参数为list、数组、map写法, https://blog.csdn.net/s592652578/article/details/52871884
[2] 实践经验,亲测可用

MyBatis传入参数为list、数组、map写法的更多相关文章

  1. MyBatis传入参数为list、数组、map写法(转载)

    MyBatis传入参数为list.数组.map写法 1.foreach简单介绍: foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有item ...

  2. MyBatis传入参数为集合 list 数组 map写法

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有item,index,collection,open,separator,close.ite ...

  3. MyBatis传入参数为集合、数组SQL写法

    参考:http://blog.csdn.net/small____fish/article/details/8029030 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合 ...

  4. (转载)mybatis中传入参数是list或map

    原文地址:http://blog.csdn.net/aya19880214/article/details/41961235 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集 ...

  5. mybatis传入参数类型parameterType和输出结果类型resultType详解

    前言 Mybatis的Mapper文件中的select.insert.update.delete元素中都有一个parameterType和resultType属性,parameterType属性用于对 ...

  6. mybatis传入参数类型parameterType详解

    前言 Mybatis的Mapper文件中的select.insert.update.delete元素中都有一个parameterType属性,用于对应的mapper接口方法接受的参数类型. ( res ...

  7. MyBatis传入参数与parameterType

    参考:http://openwares.net/database/mybatis_parametertype.html Mybatis的Mapper文件中的select.insert.update.d ...

  8. MyBatis 传入参数之parameterType

      在MyBatis的select,insert,update,delete这些元素中都提到了parameterType这个属性.MyBatis现在使用parameterType有基本类型和JAVA复 ...

  9. Mybatis传入参数类型为Map

    mybatis更新sql语句: <update id="publishT00_notice" parameterType="Map"> update ...

随机推荐

  1. spark存储模块之内存存储--MemeoryStore

    MemeoryStore 上一节,我们对BlockManager的主要写入方法做了一个整理,知道了BlockMananger的主要写入逻辑,以及对于块信息的管理.但是,由于spark的整个存储模块是在 ...

  2. 在safari上,解决fixed失效问题

    一个页面中有头部.底部和中间内容区域,底部固定在屏幕底端. 头部header 内容main 底部footer 方法一.在main上使用fixed定位,加上overflow-y属性. .main { p ...

  3. mysql 获取指定日期到指定日期 区间段的日期

    第一种方法: cross join (就相当于mysql中的循环) CROSS JOIN 把两张表中的数据进行 N * M的组合,即笛卡尔积 这里的两张表利用 union all都有5条数据,所以进行 ...

  4. spring boot如何处理异步请求异常

    springboot自定义错误页面 原创 2017年05月19日 13:26:46 标签: spring-boot   方法一:Spring Boot 将所有的错误默认映射到/error, 实现Err ...

  5. python之路第四天

    2018年7月17日 python开发IDE: pycharm.eclipse        # 专业版    # 不要汉化 安装:去官网下载pycharm 注册:https://blog.csdn. ...

  6. docker部署redis集群

    一.查询最新redis镜像 docker search redis 二.下载redis镜像 docker pull redis 三.创建一个文件夹,以及创建redis-cluster.tmpl模板文件 ...

  7. Httpd服务入门知识-正向代理和反向代理

    Httpd服务入门知识-正向代理和反向代理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.正向代理和反向代理 启用反向代理 ProxyPass "/" &q ...

  8. Kali 安装tightvncserver

    一.软件说明 a) tightvncserver是一个轻量级,只能建立桌面,不能查看TTY7/TTY1正在显示的桌面,但x11 vnc可以,相比x11vnc 安全传输差一些.反之,x11 vnc:安全 ...

  9. dfs --path sum 问题 本质上就是组合问题(有去重)

    135. 数字组合 中文 English 给定一个候选数字的集合 candidates 和一个目标值 target. 找到 candidates 中所有的和为 target 的组合. 在同一个组合中, ...

  10. jmeter压测学习1-window环境准备与案例

    前言 最近用jmeter做一些接口的压力测试,记录下使用过程中遇到的一些问题. 在使用window机器做并发压测的时候,发现并发数设置100的时候,会出现报错:java.net.SocketExcep ...