您的位置:首页 > 编程语言 > Java开发

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

2016-06-17 00:00 736 查看
摘要: 简单记录在开发中,当参数为集合时,遇到的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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mybatis java 分页查询