3

mysql でのページングにこのコードを使用します (Struts 2 + Hibernate での作業):

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

これは、最初のレコードから開始された GovOffice のリストを返し、1 ページあたり 100 レコードを表示します。

100,000 件のレコードがあるとします。このクエリは「GovOffice から」最初に 100,000 件のレコードすべてを取得しますか? setFirstResult と setMaxReSult によって、100,000 から 100 レコードに制限されます。これが true の場合、ページングが役に立たないことを意味します。

そうでない場合、 を呼び出すまでクエリが DB からデータを取得しないことを証明する方法はありませんquery.list()

4

2 に答える 2

5

QuerysetFirstResultとデータベースのsetMaxResult潜在的な可能性を使用します。

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 }
于 2012-07-13T14:30:41.330 に答える
3

ドキュメントは、最大の結果のみがデータベースから取得されることをかなり明確にしていると思います。

setMaxResults(int)

私には同等のもののようです

SELECT * FROM GovOffice LIMIT 0, 100;
于 2012-07-13T14:30:34.640 に答える