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 plaincopy
  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 plaincopy
  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 plaincopy
  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] 实践经验,亲测可用

转载于:https://www.cnblogs.com/ryelqy/p/10104070.html

MyBatis传入参数为list、数组、map写法相关推荐

  1. Mybatis传入参数类型为Map

    转载自   Mybatis传入参数类型为Map mybatis更新sql语句: <update id="publishT00_notice" parameterType=&q ...

  2. Mybatis传入参数类型为ListIntergert作为条件进行查询

    Mybatis传入参数类型为List作为条件进行查询 higher2017关注 2017.02.07 10:23:16字数 130阅读 5,658 表结构: 表名称为constant 需求: 现在想查 ...

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

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

  4. MyBatis传入参数为0时条件不生效

    当传入参数为 0 的时候,判断条件无效 <if test="sex != null and sex != '' ">and sex =#{sex } </if&g ...

  5. Mybatis传入参数类型不匹配导致的报错:

    1.先来看错误异常: com.cfc.common.utils.TranFailException: nested exception is org.apache.ibatis.reflection. ...

  6. mybatis传入参数为map时如何在mapper.xml中获取

    有时在开发中难免会遇到传入的参数为map类型的时候, map的key为数据库中的主键或者其他的唯一字段, value为需要进行插入的值,在mybaits的XML文件中进行遍历取出map参数中的值, 有 ...

  7. Mybatis传入参数map,读取map原创

    如果想输出多张表中的内容或者不是一张表里面的内容(聚集函数),而且又不想resultMap成一个实体,那就用map吧(研究了一下午的成果...) <select id="getUaMa ...

  8. MyBatis传入参数与parameterType

    来自大佬:https://www.cnblogs.com/ruiati/p/6410339.html 1.   传入简单类型 Java代码: Java代码   public User get(Long ...

  9. mybatis 传入参数及其 foreach collection的三种用法

    参考: 既然琴瑟起 https://www.cnblogs.com/qiankun-site/p/5762380.html V青山绿水  http://www.cnblogs.com/ruiati/p ...

最新文章

  1. java程序发送邮件_用java程序发送邮件
  2. mysql专区_MySQL-技术专区-详解索引原理
  3. 网站程序IIS布署问题备忘录
  4. python 存储图片 alpha_保存时Matplotlib图形面颜色alpha(背景色、透明度)
  5. ❤️《微服务开发—Swagger》(建议收藏)
  6. 第五章 线性回归 学习笔记上
  7. layer数据加载中,loading的显示
  8. Java基础语法结构
  9. 柔宇科技奔赴上市为哪般?自称“销售规模较小”,合计亏超30亿
  10. DCOS(centos 7.4/7.6)
  11. SOEM 源码解析 ecx_FRMW
  12. 基于ZigBee技术的无线抄电表系统设计(1)
  13. 化工人员定位系统提供智能安全保障
  14. 怎么做到new String(abc) == new String(abc)双等号为true呢?不是使用equals哦
  15. Ubuntu16.04 Caffe系列 最新更新安装教程 附NVIDIA显卡安装及cuda、cudnn、caffe的安装
  16. VS Code 配置 C/C++ 环境
  17. 每天一道笔试题-2012年3月12日
  18. 天气学原理和方法第四版pdf_天气学原理和方法 汇总很好很全面.pdf
  19. 程序员用Python编写的抗击疫情代码诗,付中文翻译
  20. 性能测试总结(performance testing)(一)

热门文章

  1. B2C和B2B之间有多大差距
  2. Django 学习资源
  3. IIS 6.0支持.SHTML
  4. SQL SERVER 事务处理
  5. 前端lvs访问多台nginx代理服务时出现404错误的处理
  6. 海信FW3010-5000H千兆防火墙
  7. mysql导入数据load data infile用法整理
  8. 单实例单向rac搭建gg流
  9. centos 5.8 升级php5.1至5.3
  10. OOAD实践之路——真实案例解析OO理论与实践(二、第一项任务:特性列表)