衆所周知,mybatis的傳入參數能夠是各類Java的基本類型,Date啊,Java Bean啊,可是若是想傳入一個collection怎麼辦呢?數組
經查找後發現能夠使用mapper配置文件中的foreach語句,借用別人寫的文章:mybatis
3.7 foreachapp
對於動態SQL 很是必須的,主是要迭代一個集合,一般是用於IN 條件。List 實例將使用「list」作爲鍵,數組實例以「array」 作爲鍵。測試
foreach元素是很是強大的,它容許你指定一個集合,聲明集合項和索引變量,它們能夠用在元素體內。它也容許你指定開放和關閉的字符串,在迭代之間放置分隔符。這個元素是很智能的,它不會偶然地附加多餘的分隔符。this
注意:你能夠傳遞一個List實例或者數組做爲參數對象傳給MyBatis。當你這麼作的時候,MyBatis會自動將它包裝在一個Map中,用名稱在做爲鍵。List實例將會以「list」做爲鍵,而數組實例將會以「array」做爲鍵。.net
這個部分是對關於XML配置文件和XML映射文件的而討論的。下一部分將詳細討論Java API,因此你能夠獲得你已經建立的最有效的映射。對象
3.7.1參數爲array示例的寫法略3.7.2參數爲list示例的寫法blog
接口的方法聲明:索引
public List<StudentEntity> getStudentListByClassIds_foreach_list(List<String> classIdList);
動態SQL語句:
<!-- 7.2 foreach(循環List<String>參數) - 做爲where中in的條件 -->
<select id="getStudentListByClassIds_foreach_list" resultMap="resultMap_studentEntity">
SELECT ST.STUDENT_ID,
ST.STUDENT_NAME,
ST.STUDENT_SEX,
ST.STUDENT_BIRTHDAY,
ST.STUDENT_PHOTO,
ST.CLASS_ID,
ST.PLACE_ID
FROM STUDENT_TBL ST
WHERE ST.CLASS_ID IN
<foreach collection="list" item="classIdList" open="(" separator="," close=")">
#{classIdList}
</foreach>
</select>
測試代碼,查詢學生中,在2000000一、20000002這兩個班級的學生:
public void test7_2_foreach() {
ArrayList<String> classIdList = new ArrayList<String>();
classIdList.add("20000001");
classIdList.add("20000002");
List<StudentEntity> list = this.dynamicSqlMapper.getStudentListByClassIds_foreach_list(classIdList);
for (StudentEntity e : list) {
System.out.println(e.toString());
}
}
這個是ItEye上的一篇文章,其中配置文件中的parameterType是能夠不配置的,mybatis會自動傳入的。當您想傳入collection時,並不能直接傳入collection對象,要將其先轉換爲list,而後才能傳入。由於mybatis生成SQL語句遍歷list時是須要用到get()方法的,而這個方法只在List中才有,Collection裏是沒有的。以上的配置在Mybitis官方文檔中的「動態SQL」也能夠找到。
這裏推薦一下這個博主關於Mybitis的文章,寫得很不錯。