zoukankan      html  css  js  c++  java
  • MyBatis传入参数为list、数组、map写法

    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.

    2.实践-实体类

    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

    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

    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. }

  • 相关阅读:
    杭电 Problem
    杭电Problem 5053 the sum of cube 【数学公式】
    杭电 Problem 2089 不要62 【打表】
    杭电 Problem 4548 美素数【打表】
    杭电 Problem 2008 分拆素数和 【打表】
    杭电 Problem 1722 Cake 【gcd】
    杭电 Problem 2187 悼念512汶川大地震遇难同胞——老人是真饿了【贪心】
    杭电Problem 1872 稳定排序
    杭电 Problem 1753 大明A+B
    东北林业大 564 汉诺塔
  • 原文地址:https://www.cnblogs.com/jpfss/p/11676337.html
Copyright © 2011-2022 走看看