使用Java在Google App Engine中分页

时间:2010-06-10 18:50:56

标签: java google-app-engine

我需要创建简单的对象分页,但是当我阅读手册时,我发现了query.setRange(5,10);将获取10个对象,即使只需要5个对象。

无论如何都要获取所需的对象?

编辑:我开始赏金,所以你可以用Java向我展示简单的示例代码,然后我会接受你的回答。

4 个答案:

答案 0 :(得分:2)

这个怎么样:

List<Employee> results = (List<Employee>) query.execute();
// Use the first 20 results...

Cursor cursor = JPACursorHelper.getCursor(results);
String cursorString = cursor.toWebSafeString();
// Store the cursorString...

// ...

// Query query = the same query that produced the cursor
// String cursorString = the string from storage
Cursor cursor = Cursor.fromWebSafeString(cursorString);
query.setHint(JPACursorHelper.CURSOR_HINT, cursor);
query.setRange(0, 20);

List<Employee> results = (List<Employee>) query.execute();
// Use the next 20 results...

自:

How to use datastore cursors with jpa on GAE

此外:

http://groups.google.com/group/google-appengine-java/browse_thread/thread/5223215ff24c3b3e/d22297d1d76a9c8b

或者没有JPA,请参阅:

http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Cursor.html

答案 1 :(得分:1)

在App Engine网站上有一篇关于这个主题的文章:

http://code.google.com/appengine/articles/paging.html

示例在Python中,但它们非常简单,您可以很容易地将其转换为Java。

Here's a Java implementation,我没有阅读或测试过。

答案 2 :(得分:1)

如果从数据库返回10个对象,为什么会出现问题?您仍将仅返回您关心的5个对象(前5个被丢弃)。

我不是在问,因为我认为setRange方法是一个可以很好地扩展的解决方案,但它是一个简单而合理的解决方案,在很多情况下都足够了。

您是否计划分页极大的表或合并昂贵的联接?如果没有,我很想用setRange作为你的分页的起点。

答案 3 :(得分:0)

如果您尝试进行分页,您可能希望使用cursors而不是setRange。