使用游标进行对象分页

Fab*_* B. 9 google-app-engine pagination cursor objectify

我的RPC服务中有这个方法:

@Override
    public Entrata[] getEntrate(int from, int to) {
        List<Entrata> data = entrateDao.list();
        return data.toArray(new Entrata[0]);
    }
Run Code Online (Sandbox Code Playgroud)

如您所见,我没有使用这两个参数,在SQL世界中,我将使用LIMIT和OFFSET.

现在还不完全清楚我现在要做什么,我开始阅读这篇文章:http: //code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#Cursors

我想我必须做一个query.startCursor()

然后迭代"TO"次,页面大小.

行?你可以帮我一些片段吗?:)

Igo*_*nov 15

从文档中:游标允许您在查询结果集中使用"检查点",将检查点存储在其他位置,然后从您上次停止的位置继续

当你只需要限制/偏移,你必须使用limit()offset()物化查询的方法.喜欢:

ob.query(Entrata.class).limit(to - from).offset(from)
Run Code Online (Sandbox Code Playgroud)

或者,当你有光标时:

String cursor = // get it from request
Query<Entrata> query = ob.query(Entrata.class);
Query q = query.startCursor(Cursor.fromWebSafeString(cursor));
q.limit(x);
QueryResultIterator<Entrate> iterator = query.iterator()
List<Entrate> data = // fetch data
String newCursor = iterrator.getStartCursor().toWebSafeString()
return new EntrataListWithCursor(data, cursor);
Run Code Online (Sandbox Code Playgroud)