通常分页查询看起来像这样。有没有更好的方法而不是制作两个几乎相同的方法,其中一个执行“select * ...”,另一个执行“count * ...”?
public List<Cat> findCats(String name, int offset, int limit) {
Query q = session.createQuery("from Cat where name=:name");
q.setString("name", name);
if (offset > 0) {
q.setFirstResult(offset);
}
if (limit > 0) {
q.setMaxResults(limit);
}
return q.list();
}
public Long countCats(String name) {
Query q = session.createQuery("select count(*) from Cat where name=:name");
q.setString("name", name);
return (Long) q.uniqueResult();
}
MySQLPerformanceBlog.com 的 Baron Schwartz 撰写了post http://www.mysqlperformanceblog.com/2008/09/24/four-ways-to-optimize-paginated-displays/对这个。我希望有一个解决这个问题的灵丹妙药,但没有。他提出的选项摘要:
- 在第一个查询中,获取并缓存所有结果。
- 不显示所有结果。
- 不要显示总数或到其他页面的中间链接。仅显示“下一个”链接。
- 估计有多少个结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)