參數爲集合時,mybatis3 分頁查詢問題及其對應的解決方法

當參數爲集合時,使用mybatis3分頁查詢時拋出的異常:java

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的部分代碼(測試用例):spring

@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部分代碼:apache

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

UserMapper.xml代碼(錯誤的用法示範):mybatis

<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>

執行測試用例後,後臺報本文前的異常。app

後續發現,能夠經過下面的這種方式(修改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>
相關文章
相關標籤/搜索