关于mybatis中Available parameters are [collection, list] 的问题

在使用mybatis进行foreach 操作时报错,Available parameters are [collection, list],

我的mapper文件中的代码

() <select id="getAdminByConForeach" resultType="com.blackberry.day1.Admin" > SELECT * FROM Admin WHERE id IN <foreach item="admin_id" collection="aa" separator="," index="2" open="(" close=")"> #{admin_id} </foreach> </select> ()

测试方法

(```)
@Test
public void test21() throws IOException {
String resource = "conf/mybatis.xml";
InputStream inputStream = Resources.getResourceAsStream (resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder ().build (inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession ();
try{
AdminMapperDynamicSQL adminMapperDynamicSQL = sqlSession.getMapper (AdminMapperDynamicSQL.class);
List list = adminMapperDynamicSQL.getAdminByConForeach (Arrays.asList (67,68,69,71,72));
for (Admin admin: list) {
System.out.println(admin);

        }

    }
    finally {

    }
}

(```)

查询资料后发现,当mybatis传入参数为list集合的时候;mybatis会自动把其封装为一个map;会以“list”作为key;

    每个元素的值作为value;格式为Map<"list",value>
    当mybatis传入参数为数组的时候mybatis会自动把其封装为一个map;会以“array”作为key;
    每个元素的值作为value;格式为Map<"array",value>

解决法

第一种,利用@Param注解,使得foreach里面的collection知道要遍历的集合哪个;第二种,因为mybatis封装了list所有我们将collection的属性设置为list即可,第三种将我们的List包装成Map参数进行传递。参考文章

posted @ 2018-09-13 00:44  BlackBerry-  阅读(5356)  评论(0编辑  收藏  举报