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

转载于:https://www.cnblogs.com/BlackBerry-/p/9638302.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值