我在mysql中使用此代码进行分页(使用Struts 2 + Hibernate):
Query query=getSession().createQuery("from GovOffice");
query.setFirstResult(0);
query.setMaxResult(100);
List<GovOffice> list=query.list();
这将返回从第一条记录开始的GovOffice列表,每页显示100条记录。
假设我有100,000条记录,这个“来自GovOffice”的查询是否首先获得所有100,000条记录? 通过setFirstResult和setMaxReSult,它将限制从100,000到100个记录。如果这是真的,那意味着分页必须是无用的。
如果没有办法证明在我们致电query.list()
之前查询不会从数据库获取数据。
答案 0 :(得分:5)
Query
的{{1}}和setFirstResult
使用了数据库的潜在可能性。
对于MySQL,它是limit。
所以,不,它不会获取所有记录,是的,它是有效的。
源代码中的证明(org.hibernate.dialect.MySQLDialect):
setMaxResult
答案 1 :(得分:3)