首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Hibernate HQL 分頁查詢實作:setFirstResult / setMaxResults 完整範例

     編輯:Oracle 教學

Oracle 原生分頁回顧

SELECT * FROM (
  SELECT ROWNUM rm, s.* FROM (
    SELECT * FROM myfirsttb ORDER BY stuage DESC
  ) s WHERE ROWNUM <= 5
) WHERE rm >= 2;

Hibernate Query 介面分頁 API

Query query = session.createQuery("FROM Student ORDER BY stuage DESC");
// 起始列(0-based)
query.setFirstResult((pageNo - 1) * pageSize);
// 每頁最大筆數
query.setMaxResults(pageSize);
List list = query.list();

參數說明

方法參數說明
setFirstResultint start略過前 N 筆(0 代表第一筆)
setMaxResultsint max最多回傳 N 筆

生成 SQL 對照

Hibernate 會自動轉換為資料庫原生分頁語法(Oracle 為 ROWNUM 三層嵌套、MySQL 為 LIMIT、SQL Server 為 OFFSET/FETCH),開發者無需手寫分頁 SQL。

完整範例

public List findByPage(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(*) 查詢。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved