接口 io.mybatis.mapper.cursor.CursorMapper<T, E>
游标相关的功能,是在 2016年初的 MyBatis 3.3.1 中增加的,当你想逐个从数据库取值时可以使用。
通用方法中,仅提供了两个方法示例:
Cursor<T> selectCursor(T entity)
: 根据实体字段条件查询Cursor<T> selectCursorByExample(E example)
:根据 Example 条件查询
这两个方法就提现了 5. 那就是一个 provider 实现,通过修改接口方法的返回值和入参,就能变身无数个通用方法,
这两个接口使用了 EntityProvider
和 ExampleProvider
中的现成实现,只是把返回值从 List<T>
改成了 Cursor<T>
。
一个简单的示例如下:
@Test
public void testSelectCursor() {
SqlSession sqlSession = getSqlSession();
try {
CursorMapper<User, Example<User>> mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setSex("女");
Cursor<User> userCursor = mapper.selectCursor(user);
Iterator<User> userIterator = userCursor.iterator();
int count = 0;
while (userIterator.hasNext()) {
count++;
User u = userIterator.next();
System.out.println(u.getUserName());
Assert.assertEquals(count, userCursor.getCurrentIndex() + 1);
}
Assert.assertEquals(16, count);
Assert.assertTrue(userCursor.isConsumed());
} finally {
//不要忘记关闭sqlSession
sqlSession.close();
}
}
使用游标时还需要通过注解添加一些额外配置才能生效,具体用法参考下面两篇文章:
不同数据库需要的配置不一样,这部分需要针对数据库覆盖默认实现,参考:2.1.4 重写继承接口的定义。