1. 程式人生 > >Parameter 'list1' not found. Available parameters are [list, collection]

Parameter 'list1' not found. Available parameters are [list, collection]

注意:

你可以傳遞一個 List 例項或者陣列作為引數物件傳給MyBatis。當你這麼做的時候,MyBatis會自動將它包裝在一個Map中,用名稱在作為鍵。List例項將會以“list”作為鍵,而陣列例項將會以“array”作為鍵

public interface EmployeeMapperDynamicSQL {
	public List<Employee> getEmpsByConditionForeach(List<Integer> ids); // 使用foreach標籤
}
@Test
	public void select04() throws IOException { // 測試foreach
		SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
		SqlSession openSession = sqlSessionFactory.openSession();
		try {
			EmployeeMapperDynamicSQL mapper = openSession.getMapper(EmployeeMapperDynamicSQL.class);
			
			List<Employee> list = mapper.getEmpsByConditionForeach(Arrays.asList(1, 3, 5));
			for (Employee emp : list) {
				System.out.println(emp);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			openSession.close();
		}
	}
<select id="getEmpsByConditionForeach" resultType="com.mybatis.bean.Employee">
		select * from tb1_employee where id in
		<!-- 
			collection:指定要遍歷的集合
				List型別的引數會特殊處理在map中,map的key就叫list
				Array陣列型別的引數會特殊處理在map中,map的key就叫array
			item:將當前遍歷的元素賦值給指定的變數
			separator:每個元素之間的分隔符
			open:遍歷出所有結果拼接一個開始的字元
			close:遍歷出所有結果拼接一個結束的字元
			index:索引。遍歷list的時候是索引,item就是當前值
				    遍歷map的時候,index是key,item就是map的值
			#{變數名}就能取出變數的值,也就是當前遍歷出的元素
		 -->
		 <foreach collection="aa" item="item" separator="," open="(" close=")" index="index">
		 	#{item}
		 </foreach>
</select>

解決:把collection="aa"修改為list,因為mybatis會自動封裝在一個map中,而你以集合的方式傳引數過去,map會以list作為key,所以將collection="aa"修改為list