大話分頁(一)

來源:互聯網
上載者:User

本文討論範疇只在真分頁,下面談到的分頁也特指真分頁)。


分頁共性



三種資料的分頁方式的比較


MySql資料庫特色分頁




Oracle資料庫常用分頁

select T.*,rownum rn from () T where rownum <PageNo*PageSize) where rn >=(PageNo-1)*PageSize

select A.*,rownum rn from () A where rownum <41) where rn >=20

SqlServer資料常用分頁

緊跟這第一頁顯示的記錄之後的5條記錄,也就是通過對userID欄位進行降序排列時,它們是除了第一頁資料之後的5條記錄,也就是它們的userID不在第一頁的UserID之中,在SQL語句有一個not in這個正好可以排上用場。 首先我們按照對UserID進行降序排序,查詢出前面第一頁使用的資料的UserID,SQL語句及執行結果如下:

select 5 userID from t_User order by userID asc) order by userID asc

select top(n-1)*5 userID from t_User order by userID asc) order by userID asc

Hibernate架構的分頁

public class AbstractPageManager extends HibernateDaoSupport {/** * 根據HQL語句,獲得尋找總記錄數的HQL語句 如:  * select ... from Organization o where o.parent is null  * 經過轉換,可以得到:  * select count(*) from Organization o where o.parent is null *  * @param hql * @return */private String getCountQuery(String hql) {// 取得from的位置int index = hql.indexOf("from");// 返回:查詢記錄條數 的SQL語句if (index != -1) {return "select count(*) " + hql.substring(index);}throw new SystemException("無效的HQL查詢語句");}/** * 根據HQL語句進行分頁查詢 *  * @param hql HQL語句 * @param params HQL語句帶的多個參數 * @param offSet 從第幾個記錄開始查詢 * @param pageSize 每頁顯示多少行 * @return */public PageModel searchPaginate(String hql, Object[] params, int offSet,int pageSize) {// 記錄條數String strCount = getCountQuery(hql);// 查詢條數Query query = getSession().createQuery(strCount);// 將HQL語句帶的多個參數 賦值給Queryif (params != null && params.length > 0) {for (int i = 0; i < params.length; i++) {query.setParameter(i, params[i]);}}// 擷取查詢條數int intCount = ((Long) query.uniqueResult()).intValue();// 查詢Organization記錄query = getSession().createQuery(hql);// 將HQL語句帶的多個參數 賦值給Queryif (params != null && params.length > 0) {for (int i = 0; i < params.length; i++) {query.setParameter(i, params[i]);}}/* * offSet 設定從第幾個記錄開始查詢 * pageSize 設定每頁顯示多少行 */query.setFirstResult(offSet);query.setMaxResults(pageSize);//組裝PageModelPageModel pageModel = new PageModel();pageModel.setDatas(query.list());pageModel.setTotal(intCount);return pageModel;}}


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.