在使用foreach語句時會經常報Parameter ‘ordersList’ not found. Available parameters are [Collection,list] 這個錯誤,造成這個錯誤的主要原因寫法錯誤:請看錯誤實例
mapper接口中
List<Orders> selectKeyList(List<Integer> ordersList);
在mapper.xml中你的寫法是
<foreach collection="ordersList" item="item" open="and id in(" separator="," close=")" >
#{item}
</foreach>
由下面這段代碼你可以知道 collection=”ordersList”不能這么寫
private Object wrapCollection(Object object) {
DefaultSqlSession.StrictMap map;
// 如果傳入參數是一個集合
if (object instanceof Collection) {
//創建1個Map
map = new DefaultSqlSession.StrictMap();
map.put("collection", object);
//注意 如果參數是list
if (object instanceof List) {
//那么傳來的參數,collection的默認寫法應該 collection="list"
map.put("list", object);
}
return map;
} else if (object != null && object.getClass().isArray()) {
map = new DefaultSqlSession.StrictMap();
//數組的默認寫法為collection="array"
map.put("array", object);
return map;
} else {
return object;
}
}
所以你的collection=”ordersList”應該改為collection=”list” 這樣就能將錯誤改正,當然如果不想改,那么只有改動mapper接口中定義的方法了如下:
List<Orders> selectKeyList(@Param("ordersList")List<Integer> ordersList);