Parameter 'list1' not found. Available parameters are [list, collection]
阿新 • • 發佈:2019-01-26
注意:
你可以傳遞一個 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