SELECT * FROM (
SELECT ROWNUM rm, s.* FROM (
SELECT * FROM myfirsttb ORDER BY stuage DESC
) s WHERE ROWNUM <= 5
) WHERE rm >= 2;
Query query = session.createQuery("FROM Student ORDER BY stuage DESC");
// 起始列(0-based)
query.setFirstResult((pageNo - 1) * pageSize);
// 每頁最大筆數
query.setMaxResults(pageSize);
List list = query.list();
| 方法 | 參數 | 說明 |
|---|---|---|
| setFirstResult | int start | 略過前 N 筆(0 代表第一筆) |
| setMaxResults | int max | 最多回傳 N 筆 |
Hibernate 會自動轉換為資料庫原生分頁語法(Oracle 為 ROWNUM 三層嵌套、MySQL 為 LIMIT、SQL Server 為 OFFSET/FETCH),開發者無需手寫分頁 SQL。
public ListfindByPage(int pageNo, int pageSize) { Session session = factory.openSession(); try { Query query = session.createQuery("FROM Student ORDER BY stuno"); query.setFirstResult((pageNo - 1) * pageSize); query.setMaxResults(pageSize); return query.list(); } finally { session.close(); } }
ORDER BY 確保分頁穩定。ScrollableResults 或 StatelessSession 避免記憶體壓力。SELECT COUNT(*) 查詢。