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

 

4.实践-Mapper

 

 

  1.  
    public interface EmployeesMapper {
  2.  
     
  3.  
    List<Employees> getEmployeesListParams(List<String> employeeIds);
  4.  
     
  5.  
    List<Employees> getEmployeesArrayParams(String[] employeeIds);
  6.  
     
  7.  
    List<Employees> getEmployeesMapParams(Map<String,Object> params);
  8.  
    }
     
     

    Mybaits 遍历Map【注解使用】

    1、遍历map

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    package com.isuzu.vehicle.onroad.dal.mapper;
     
    import com.baomidou.mybatisplus.core.mapper.BaseMapper;
    import com.isuzu.vehicle.onroad.dal.entity.VehicleOnroad;
    import com.isuzu.vehicle.onroad.service.vo.VehicleOnroadVo;
    import com.ne.ice.boot.common.entity.Page;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Result;
    import org.apache.ibatis.annotations.Results;
    import org.apache.ibatis.annotations.Select;
    import org.apache.ibatis.type.JdbcType;
     
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
     
    /**
      * @author Yungui.Zheng
     */
    public interface VehicleOnroadMapper  extends BaseMapper<VehicleOnroad>
    {
     
        /**
         *  分页查询
         * @param page 分页对象
         * @param conditionMap  条件map
         * @param order 排序
         * @return 分页list
         */
        @Select("<script>"
                " select   "
                +"  *  "
                " FROM   "
                "   tm_vehicle_onroad "
                +" <where> "
                +" <foreach collection=\"cond.keys\" item=\"wkey\" >"
                +"  <choose>  " +
                "        <when test=\"wkey =='vin'\">  " +//关键词
                "           and vin like concat('%',#{cond[${wkey}]},'%')  " +
                "        </when>  " +
                "        <when test=\"wkey =='vinList'\">  " +//用户vinList
                "           and vin in (\n" +
                "                <foreach collection=\"cond[wkey]\" item=\"item\" index=\"index\" separator=\",\">\n" +
                "                    #{item}\n" +
                "                </foreach>) " +
                "        </when>  " +
                "        <when test=\"wkey =='from'\">  " +//开始时间
                "           and create_time  >=#{cond[${wkey}]} " +
                "        </when>  " +
                "        <when test=\"wkey =='to'\">  " +//结束时间
                "           and create_time  <=#{cond[${wkey}]} " +
                "        </when>  " +
                "        <otherwise>  " +
                "               <if test=\"cond[wkey]!= null\">and   ${wkey}= #{cond[${wkey}]}</if> " +
                "        </otherwise>  " +
                "    </choose>"+
                "</foreach>  "+
                " </where> "
                +" <if test=\"order!= null\"> ${order}</if> "
                "</script>")
        List<VehicleOnroad> selectPageByMap(Page<VehicleOnroad> page, @Param("cond") Map<String, Object> conditionMap, @Param("order") String order) ;
     
    }
     
posted @ 2021-10-15 09:33  旧巷里的旧少年  阅读(743)  评论(0编辑  收藏  举报