mybatis 实现流式查询、游标查询很简单
jdbc:mysql://127.0.0.1:3306/test?useCursorFetch=true
<select id="streamingQuery" fetchSize="-2147483648" resultMap="BaseResultMap">
select id, name from user limit 10
select>
<select id="cursorQuery" fetchSize="3" resultMap="BaseResultMap">
select id, name from user limit 10
select>
Cursor<User> streamingQuery();
Cursor<User> cursorQuery();
@RestController
public class TestController {
private final UserMapper userMapper;
public TestController(UserMapper userMapper) {
this.userMapper = userMapper;
}
// 注意点:获取数据时要保证数据库连接没有被回收,这里使用了 @Transactional 保证
@Transactional
@GetMapping("streaming")
public List<User> streamingQuery() {
Cursor<User> cursor = userMapper.streamingQuery();
return getData(cursor);
}
@Transactional
@GetMapping("cursor")
public List<User> cursorQuery() {
Cursor<User> cursor = userMapper.cursorQuery();
return getData(cursor);
}
public List<User> getData(Cursor<User> cursor) {
List<User> list = new LinkedList<>();
cursor.forEach(list::add);
return list;
}
}