mybatis foreach詳解

mybatis foreach 參數說明:sql

屬性    描述數組

  • item ,循環體中的具體對象。支持屬性的點路徑訪問,如item.age,item.info.details.  具體說明:在list和數組中是其中的對象,在map中是value.該參數爲必選。mybatis

  • 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等於什麼,就看你想對那個元素作循環。該參數爲必選。app

  • separator,元素之間的分隔符,例如在in()的時候,separator=","會自動在元素中間用「,「隔開,避免手動輸入逗號致使sql錯誤,如in(1,2,)這樣。該參數可選。spa

  • open,foreach代碼的開始符號,通常是(和close=")"合用。經常使用在in(),values()時。該參數可選。.net

  • close,foreach代碼的關閉符號,通常是)和open="("合用。經常使用在in(),values()時。該參數可選。xml

  • index,在list和數組中,index是元素的序號,在map中,index是元素的key,該參數可選。對象


**********************************************具體操做*******************************************blog

------------------------------collection操做的是List---------------------------------------it

一、參數爲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)


二、參數爲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.


三、參數爲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

相關文章
相關標籤/搜索