参数为集合时,mybatis3 分页查询问题及其对应的解决方法

当参数为集合时,使用mybatis3分页查询时抛出的异常:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter '__frch_item_0' not found. Available parameters are [param1, statuses]

UserMapperTest.java的部分代码(测试用例):

 @Test
    public void findByStatus() {
        List<Integer> statuses = new ArrayList<Integer>();
        statuses.add(0);
        statuses.add(1);
        statuses.add(2);
        PageProxyBuilder<UserMapper> builder = PageProxyBuilder.newBuilder(UserMapper.class);
        builder.setPageParameter(10, 10);
        List<User> list = builder.createProxy().findByStatus(statuses);
        System.out.println(list.size());
    }

UserMapper.java部分代码:

  /**
     * 分页获取用户信息列表
     *
     * @param statuses
     * @return
     * @author Kevin
     */
    List<User> findByStatus(@Param("statuses") Collection<Integer> statuses);

UserMapper.xml代码(错误的用法示范):

  <select id="findByStatus" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM ms_borrow_collection
        <where>
            AND status in
            <foreach item="item" index="index" collection="statuses"
                     open="(" separator="," close=")">
                #{item} // 这是错误的用法示范
            </foreach>
        </where>
    </select>

执行测试用例后,后台报本文前的异常。

后续发现,可以通过下面的这种方式(修改UserMapper.xml)解决这个问题:

  <select id="findByStatus" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM ms_borrow_collection
        <where>
            AND status in
            <foreach item="item" index="index" collection="statuses"
                     open="(" separator="," close=")">
                #{statuses[${index}]} // 这是正确的用法示范
            </foreach>
        </where>
    </select>

转载于:https://my.oschina.net/zhaokaiju/blog/693542

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值