當參數爲集合時,使用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>