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. Java自学-数字与字符串 字符

    Java中的字符 示例 1 : 保存一个字符的时候使用char package character; public class TestChar { public static void main(S ...

  2. Django的安全攻击

    目录 Django的安全攻击 XSS XSS(跨站脚本攻击) 危害 原理 防护 csrf(Cross Site Request Forgery) csrf(跨站域请求伪造) 过程 Django 提供的 ...

  3. Django---FORM组件.FORM组件的字段,FORM组件校验流程,FORM组件的全局和局部钩子,FORM和Model的组合

    Django---FORM组件.FORM组件的字段,FORM组件校验流程,FORM组件的全局和局部钩子,FORM和Model的组合 一丶FORM的介绍 1.生成页面可用的HTML标签 2.对用户提交的 ...

  4. C#使用SMTP协议发送验证码到QQ邮箱

    C#使用SMTP协议发送验证码到QQ邮箱 在程序设计中,发送验证码是常见的一个功能,用户在注册账号时或忘记密码后,通常需要发送验证码到手机短信或邮箱来验证身份,此篇博客介绍在C#中如何使用SMTP协议 ...

  5. AQS原理

    1. AQS原理 1.1. 是什么 AQS全程AbstractQueuedSynchronizer抽象队列同步器,它是并发包中的基础类 ReetrantLock,ReentrantReadWriteL ...

  6. BBC评出的100本最具影响力经典书籍

    今年,英国广播公司(BBC)邀请全球35个国家共108名文化人士,参与其发起的“影响思维和历史的100部虚构故事”的推荐,要求每人最多提名 5 部作品,这些作品最终将根据提名总量排名. 该活动经过一个 ...

  7. Pandas 之 Series / DataFrame 初识

    import numpy as np import pandas as pd Pandas will be a major tool of interest throughout(贯穿) much o ...

  8. 内核中dump_stack的实现原理(1) —— 栈回溯

    环境 Aarch64 Qemu aarch64-linux-gnu-gcc linux-4.14   概述     栈回溯的目的是将函数的调用栈打印出来,对于分析函数调用和debug系统异常会很有帮助 ...

  9. Mac下Mysql配置

    安装 http://www.mirrorservice.org/sites/ftp.mysql.com/Downloads/MySQL-5.6/mysql-5.6.41-macos10.13-x86_ ...

  10. VS Code + MinGW + Clang + OpenGL (vscode 配置 opengl环境)

    vscode配置opengl环境会遇到一些问题,这里是在看了一些博文之后给出的一篇完整的可行的配置 首先,要配置C++环境,网上有很多完整的配置C++环境的教程,这里就引用一条 https://www ...