关于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参数进行传递。参考文章


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM