[轉]Mybatis foreach 批量操做

原文地址:https://blog.csdn.net/jason5186/article/details/40896043mysql

foreach屬性
屬性    描述
item    循環體中的具體對象。支持屬性的點路徑訪問,如item.age,item.info.details。
具體說明:在list和數組中是其中的對象,在map中是value。
該參數爲必選。
collection    要作foreach的對象,做爲入參時,List<?>對象默認用list代替做爲鍵,數組對象有array代替做爲鍵,Map對象用map代替做爲鍵。
固然在做爲入參時能夠使用@Param("keyName")來設置鍵,設置keyName後,list,array,map將會失效。 除了入參這種狀況外,還有一種做爲參數對象的某個字段的時候。舉個例子:
若是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,該參數可選。


<select id="countByUserList" resultType="_int" parameterType="list">  
select count(*) from users  
  <where>  
    id in  
    <foreach item="item" collection="list" separator="," open="(" close=")" index="">  
      #{item.id, jdbcType=NUMERIC}  
    </foreach>  
  </where>  
</select>

::select count(*) from users WHERE id in ( ? , ? )
 <insert id="addList">
        
        INSERT INTO DELIVER
            (
                 <include refid="selectAllColumnsSql"/>
             )
         
          <foreach collection="deliverList" item="item" separator="UNION ALL">
                SELECT
                     #{item.id, jdbcType=NUMERIC},
                     #{item.name, jdbcType=VARCHAR}
                FROM DUAL
          </foreach>
    </insert>

::insert into deliver select ?,? from dual union all select ?,? from dual
<insert id="ins_string_string">  
        insert into string_string (key, value) values  
        <foreach item="item" index="key" collection="map"  
            open="" separator="," close="">(#{key}, #{item})</foreach>  
    </insert>

::insert into string_string (key, value) values (?, ?) , (?, ?)  -- mysql
<select id="sel_key_cols" resultType="int">  
        select count(*) from key_cols where  
        <foreach item="item" index="key" collection="map"  
            open="" separator="AND" close="">${key} = #{item}</foreach>  
    </select>

::select count(*) from key_cols where col_a = ? AND col_b = ?  (必定要注意到$和#的區別,$的參數直接輸出,#的參數會被替換爲?,而後傳入參數值執行。)

sql

相關文章
相關標籤/搜索