mybatis foreach详解

原创
2015/05/14 11:50
阅读数 316

mybatis foreach 参数说明:

属性    描述

  • item ,循环体中的具体对象。支持属性的点路径访问,如item.age,item.info.details.  具体说明:在list和数组中是其中的对象,在map中是value.该参数为必选。

  • collection,要做foreach的对象,作为入参时,List<?>对象默认用list代替作为键,数组对象有array代替作为键,Map对象没有默认的键。当然在作为入参时可以使用@Param("keyName")来设置键,设置keyName后,list,array将会失效。 除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:如果User有属性List ids。入参是User对象,那么这个collection = "ids".如果User有属性Ids ids;其中Ids是个对象,Ids有个属性List id;入参是User对象,那么collection = "ids.id".上面只是举例,具体collection等于什么,就看你想对那个元素做循环。该参数为必选。

  • separator,元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。

  • open,foreach代码的开始符号,一般是(和close=")"合用。常用在in(),values()时。该参数可选。

  • close,foreach代码的关闭符号,一般是)和open="("合用。常用在in(),values()时。该参数可选。

  • index,在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。


**********************************************具体操作*******************************************

------------------------------collection操作的是List---------------------------------------

1、参数为Map,"callLetters":List<String>

   Mapper类:

       public List<TWgLastPos> findByParams(Map<String,Object> params);

   MapperXML:

      (1) <select id="findByParams" parameterType="Map" resultType="TWgLastPos">

    SELECT * FROM t_wg_last_pos

    <where>

       call_letter in

       <foreach collection="callLetters" item="item" index="index" open="(" separator="," close=")">

            #{item}

       </foreach>

    </where>

 </select>


 结果:SELECT * FROM t_wg_last_pos WHERE call_letter in ( ? , ? , ? ) 

            Parameters: 1381254878(String), 1381254877(String), 1381254879(String)


     (2) 读取index

          <select id="findByParams" parameterType="Map" resultType="TWgLastPos">

    SELECT * FROM t_wg_last_pos

    <where>

       call_letter in

       <foreach collection="callLetters" item="item" index="index" open="(" separator="," close=")">

            #{index}

       </foreach>

    </where>

 </select>


结果:SELECT * FROM t_wg_last_pos WHERE call_letter in ( ? , ? , ? ) 

     Parameters: 0(Integer), 1(Integer), 2(Integer)


2、参数为List<String>和上面的操作基本类型:

   Mapper:

        public List<TWgLastPos> findByParams(@Param("calls")List<String> list);

   Mapper xml:

        <select id="findByParams" parameterType="Map" resultType="TWgLastPos">

    SELECT * FROM t_wg_last_pos

    

    <where>

       call_letter in

       <foreach collection="calls" item="item" index="index" open="(" separator="," close=")">

            #{index}

       </foreach>

    </where>

</select>


结果:同1,这里可以看出和parameterType没有关系,传递的参数是List,这里也能正常执行.

     默认情况下,List下面,collection="list",可以通过@Param修改key,这里为calls.


3、参数为List<Map<String,Object>> 

   Mapper: 

      public List<TWgLastPos> findByParams(List<Map<String,Object>> list);


   Mapper xml:

      <select id="findByParams" parameterType="Map" resultType="TWgLastPos">

    SELECT * FROM t_wg_last_pos

    

    <where>

       call_letter in

       <foreach collection="list" item="item" index="index" open="(" separator="," close=")">

            #{item.callLetter}

       </foreach>

    </where>

</select>

-------------------------------------------------操作的是Map---------------------------------


Mapper:

    public List<TWgLastPos> findByParams(@Param("map") Map<String,Object> params);//没有默认Key,必须这样赋值

Mapper xml:

    <select id="findByParams" parameterType="Map" resultType="TWgLastPos">

    SELECT * FROM t_wg_last_pos

    

    <where>

       call_letter in

       <foreach collection="map" item="item" index="index" open="(" separator="," close=")">

            #{item}

       </foreach>

    </where>

</select>


结论:    parameterType没有关系;

     通过@Param修改key.

参考博文:http://blog.csdn.net/isea533/article/details/21237175

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部