我的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”次,即页面大小。
好的,好吗?你可以帮我一些片段吗? :)答案 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", "")
}