使用游标进行对象分页

时间:2011-08-11 13:59:59

标签: 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]);
    }

正如您所看到的,我没有使用这两个参数,在SQL世界中,我会将其用作LIMIT和OFFSET。

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

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

然后迭代“TO”次,即页面大小。

好的,好吗?你可以帮我一些片段吗? :)

2 个答案:

答案 0 :(得分:15)

来自docs:游标允许您在查询结果集中使用“检查点”,将检查点存储在其他位置,然后从您上次停止的地方继续

由于您只需要限制/偏移,您必须使用Objectify Query的limit()offset()方法。像:

ob.query(Entrata.class).limit(to - from).offset(from)

或者,当你有光标时:

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);

答案 1 :(得分:0)

我只想确保您的代码中没有任何错误,因为您可以复制并粘贴Igor Artamonov代码。 这是来自Objectify Wiki的更干净的代码,具有更少的错误和一些文档:

javadoc {
  options.addStringOption("sourcepath", "")
}