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. 安装fastnlp

    直接 pip install fastnlp 如果出现 torch的安装报错,可能与操作系统及 CUDA 的版本相关.直接上pytorch 的官网 https://pytorch.org/get-st ...

  2. webpack 里的 import, exports 实现原理

    在使用 webpack 对脚本进行打包, 在开发中, 每个文件中都会使用 import 语句来导入一些功能,又会使用 export 语句导出一些功能,为了研究 import 和 export 原理,研 ...

  3. 指定细则 Small

    根据HTML5,small表示细则一类的旁注(side comment). “通常包括免责声明.注意事项.法律限制.版权信息等.有时我们还可以用它来表示署名,或者满足许可要求.” small通常是行内 ...

  4. 英语caement单词caement水泥

    水泥石  又称净浆硬化体.是指 硬化后的水泥浆体,称为水泥石,在英语里是cement有时写作caement [1] ,是由胶凝体.未水化的水泥颗粒内核.毛细孔等组 成的非均质体. 中文名:水泥石 外 ...

  5. 怎么解决前端线上Bug

    有一种八阿哥(Bug),叫"在我电脑上是好的呀". 有一种解决方式,叫"你去好好排查一下你自己的代码". 有一种控诉,叫"这绝不是后端的问题" ...

  6. 关于c3p0的重连机制(转载)

    1)C3P0容错和自动重连与以下配置参数有关: breakAfterAcquireFailure :true表示pool向数据库请求连接失败后标记整个pool为block并close,就算后端数据库恢 ...

  7. App的开发过程(转载)

    来源:https://www.cnblogs.com/sanwenyu/p/7234616.html 不同的项目管理模式或许会有完全不同的流程步骤.但是专业性几乎是保证产品质量的唯一准则. App的开 ...

  8. H3C CSMA/CA

  9. awk - 数据分析和展示

    目录 NAME 格式 常用选项 表达式 PATTERN(模式) 流程控制语句 数组 print,printf格式化输出 常用示例 NAME gawk - pattern scanning and pr ...

  10. Socket网络编程-TCP编程

    Socket网络编程-TCP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.socket介绍 1>.TCP/IP协议 2>.跨网络的主机间通讯 在建立通信连接的 ...