目标是使用Ebean加载从数据库分页的行。假设我们要打印“ 10000行到1行到10行”。
通常,这需要两个查询。一个用于获取所有记录的计数,另一个用于获取实际行,并遵守keyword
参数。
Ebean像这样处理这种双查询方法:
limit
很明显,Ebean的构建器必须应用所有查询条件,然后克隆该构建器,并使用PagedList<User> result = query.findPagedList();
result.getTotalCount(); // gives 10000
result.getList(); // gives the page of rows
完成一个版本,而使用limit
完成另一个版本。
考虑到基于偏移量/限制的分页,这很好用。现在,我正在研究基于光标的分页。为了简洁地传达设计,请参阅https://stackoverflow.com/a/49612308/2694806作为参考。
请注意,该方法需要一个唯一+有序+不可变的字段,我们将通过说count
向查询添加“光标”。自然,这会向Ebean的查询构建器添加一个where column < cursor
条件。
问题在于,此where
准则显然会歪曲where
的值。
前进的方向: