在使用foreach的時候最容易出錯的就是collection屬性,該屬性是必須指定的,在不一樣狀況 下,該屬性的值是不同的,主要有一下3種狀況:html
1. 若是傳入的是單參數且參數類型是一個List的時候,collection屬性值爲listjava
2. 若是傳入的是單參數且參數類型是一個array數組的時候,collection的屬性值爲array數組
3. 若是傳入的參數是多個的時候,咱們就須要把它們封裝成一個Map了,固然單參數也能夠封裝成map,實際上若是你在傳入參數的時候,在breast裏面也是會把它封裝成一個Map的,map的key就是參數名,因此這個時候collection屬性值就是傳入的List或array對象在本身封裝的map裏面的key.mybatis
我採用mybatis直接將數組看成參數傳入老是出現錯誤,說找不到參數,也按照上述的條件一一嘗試結果仍是不行,我想可能出現這個問題的緣由是mybatis的版本問題。後來採用傳入一個實體,在實體裏面定義數組的方法。而後操做,這樣就不出錯了。此方法雖爲下冊,但也能夠應付一些關鍵問題。this
下面看看代碼把!.net
實體bean:code
package com.huaat.weibo.vo; import java.io.Serializable; /** * 個人微博實體 * @author jing.yue * @version 2012/07/17 1.0.0 */ public class MyWeibo implements Serializable { private static final long serialVersionUID = 754681127580984228L; private String[] fileNames; private String[] fileUrls; public String[] getFileNames() { return fileNames; } public void setFileNames(String[] fileNames) { this.fileNames = fileNames; } public String[] getFileUrls() { return fileUrls; } public void setFileUrls(String[] fileUrls) { this.fileUrls = fileUrls; } }
下面爲mybatis的配置文件[myWeibo爲實體]:htm
<!-- 刪除微博 --> <delete id="delMyWeibo" parameterType="myWeibo"> delete from my_weibo where weibo_id in <foreach item="item" index="index" collection="fileUrls" open="(" separator="," close=")"> #{item} </foreach> </delete>
解釋下foreach的參數:對象
foreach元素的屬性主要有 item,index,collection,open,separator,close。get
item表示集合中每個元素進行迭代時的別名.
index指 定一個名字,用於表示在迭代過程當中,每次迭代到的位置.
open表示該語句以什麼開始,separator表示在每次進行迭代之間以什麼符號做爲分隔 符.
close表示以什麼結束.
至於調用這個方法的代碼:
/** * 刪除微博 * @param myWeibo */ public abstract void delMyWeibo(MyWeibo myWeibo);
這樣就解決這個問題了~