生活随笔
收集整理的這篇文章主要介紹了
基于hibernate实现的分页技术
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
先說明一下基于hibernate實現(xiàn)分頁的原理,假如從數據庫取出100條數據,我們要讓每頁顯示10條,假如從30開始,只需要設置起始位置和最大的返回結果即可
先上代碼:注意傳進來的參數有 Page這類,后面有介紹
[javascript] view plain
copy public?List<Article>?queryByPage(final?String?username,?final?Page?page)?{??????????return?this.getHibernateTemplate().executeFind(new?HibernateCallback()?{??????????????public?Object?doInHibernate(Session?session)??????????????????????throws?HibernateException,?SQLException?{??????????????????Query?query?=?session.createQuery("select?art?from?Article?art?where?art.username?=??");????????????????????????????????????query.setParameter(0,?username);????????????????????????????????????query.setMaxResults(page.getEveryPage());????????????????????????????????????query.setFirstResult(page.getBeginIndex());??????????????????return?query.list();??????????????}??????????});??
上面關鍵代碼是?setMaxResults(),和setFirstResult(),即設置最大顯示值和起點
這里我們需要一個Page工具類,用來操作分頁。
Page.java
[java] view plain
copy package?com.fenye;????public?class?Page?{????????????private?int?everyPage;????????????private?int?totalCount;????????????private?int?totalPage;????????????private?int?currentPage;????????????private?int?beginIndex;????????????private?boolean?hasPrePage;????????????private?boolean?hasNextPage;????????public?Page(int?everyPage,?int?totalCount,?int?totalPage,?int?currentPage,??????????????int?beginIndex,?boolean?hasPrePage,?boolean?hasNextPage)?{??????????this.everyPage?=?everyPage;??????????this.totalCount?=?totalCount;??????????this.totalPage?=?totalPage;??????????this.currentPage?=?currentPage;??????????this.beginIndex?=?beginIndex;??????????this.hasPrePage?=?hasPrePage;??????????this.hasNextPage?=?hasNextPage;??????}??????????????public?Page(){}??????????????????????????????public?int?getEveryPage()?{??????????return?everyPage;??????}????????public?void?setEveryPage(int?everyPage)?{??????????this.everyPage?=?everyPage;??????}????????public?int?getTotalCount()?{??????????return?totalCount;??????}????????public?void?setTotalCount(int?totalCount)?{??????????this.totalCount?=?totalCount;??????}????????public?int?getTotalPage()?{??????????return?totalPage;??????}????????public?void?setTotalPage(int?totalPage)?{??????????this.totalPage?=?totalPage;??????}????????public?int?getCurrentPage()?{??????????return?currentPage;??????}????????public?void?setCurrentPage(int?currentPage)?{??????????this.currentPage?=?currentPage;??????}????????public?int?getBeginIndex()?{??????????return?beginIndex;??????}????????public?void?setBeginIndex(int?beginIndex)?{??????????this.beginIndex?=?beginIndex;??????}????????public?boolean?isHasPrePage()?{??????????return?hasPrePage;??????}????????public?void?setHasPrePage(boolean?hasPrePage)?{??????????this.hasPrePage?=?hasPrePage;??????}????????public?boolean?isHasNextPage()?{??????????return?hasNextPage;??????}????????public?void?setHasNextPage(boolean?hasNextPage)?{??????????this.hasNextPage?=?hasNextPage;??????}????}??
Page工具類主要是封裝頁面信息,一共多少數據啊,一頁顯示多少啊,起點的序號,總頁數,是否有上一頁下一頁,當前頁。
還需要一個操作page的工具類,PageUtil.java
[javascript] view plain
copy package?com.sanqing.fenye;??????public?class?PageUtil?{????????????public?static?Page?createPage(int?everyPage,int?totalCount,int?currentPage)?{??????????everyPage?=?getEveryPage(everyPage);??????????currentPage?=?getCurrentPage(currentPage);??????????int?totalPage?=?getTotalPage(everyPage,?totalCount);??????????int?beginIndex?=?getBeginIndex(everyPage,?currentPage);??????????boolean?hasPrePage?=?getHasPrePage(currentPage);??????????boolean?hasNextPage?=?getHasNextPage(totalPage,?currentPage);??????????return?new?Page(everyPage,?totalCount,?totalPage,?currentPage,??????????????????beginIndex,?hasPrePage,??hasNextPage);??????}????????????public?static?Page?createPage(Page?page,int?totalCount)?{??????????int?everyPage?=?getEveryPage(page.getEveryPage());??????????int?currentPage?=?getCurrentPage(page.getCurrentPage());??????????int?totalPage?=?getTotalPage(everyPage,?totalCount);??????????int?beginIndex?=?getBeginIndex(everyPage,?currentPage);??????????boolean?hasPrePage?=?getHasPrePage(currentPage);??????????boolean?hasNextPage?=?getHasNextPage(totalPage,?currentPage);??????????return?new?Page(everyPage,?totalCount,?totalPage,?currentPage,??????????????????beginIndex,?hasPrePage,??hasNextPage);??????}??????????????????public?static?int?getEveryPage(int?everyPage)?{??????????return?everyPage?==?0???10?:?everyPage;??????}??????????????????public?static?int?getCurrentPage(int?currentPage)?{??????????return?currentPage?==?0???1?:?currentPage;??????}??????????????????public?static?int?getTotalPage(int?everyPage,int?totalCount)?{??????????int?totalPage?=?0;??????????if(totalCount?%?everyPage?==?0)?{??????????????totalPage?=?totalCount?/?everyPage;??????????}?else?{??????????????totalPage?=?totalCount?/?everyPage?+?1;??????????}??????????return?totalPage;??????}??????????????????public?static?int?getBeginIndex(int?everyPage,int?currentPage)?{??????????return?(currentPage?-?1)?*?everyPage;??????}??????????????????public?static?boolean?getHasPrePage(int?currentPage)?{??????????return?currentPage?==?1???false?:?true;??????}??????????????????public?static?boolean?getHasNextPage(int?totalPage,?int?currentPage)?{??????????return?currentPage?==?totalPage?||?totalPage?==?0???false?:?true;??????}????????}??
創(chuàng)建Page只需要3個參數,每頁顯示多少數據,當前頁,總共多少數據,其他的4個參數都可以通過這三個計算出來
所以后面要創(chuàng)建Page,只需要調用這工具方法PageUtil.createPage(3個參數),就返回一Page.
返回的Page就是前面參數的Page,即要顯示的分頁
這樣就算完成了分頁的功能。
總結
以上是生活随笔為你收集整理的基于hibernate实现的分页技术的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。