关于mysql中的Query语句

Lee*_*han 3 java mysql hibernate

我在mysql中使用此代码进行分页(使用Struts 2 + Hibernate):

Query query=getSession().createQuery("from GovOffice");
query.setFirstResult(0);
query.setMaxResult(100);
List<GovOffice> list=query.list();
Run Code Online (Sandbox Code Playgroud)

这将返回从第一条记录开始的GovOffice列表,每页显示100条记录.

假设我有100,000条记录,这个"来自GovOffice"的查询是否首先获得所有100,000条记录?通过setFirstResult和setMaxReSult,它将限制从100,000到100个记录.如果这是真的,那意味着分页必须是无用的.

如果没有,有任何方法可以证明在我们调用之前查询不会从DB获取数据query.list().

Den*_*ret 5

QuerysetFirstResultsetMaxResult使用数据库的潜在可能性.

在MySQL的情况下,它是限制.

所以,不,它不会获取所有记录,是的,它是有效的.

源代码中的证明(org.hibernate.dialect.MySQLDialect):

238 public String getLimitString(String sql, boolean hasOffset) {
239     return new StringBuffer( sql.length()+20 )
240         .append(sql)
241         .append( hasOffset ? " limit ?, ?" : " limit ?")
242         .toString();
243 }
Run Code Online (Sandbox Code Playgroud)