springmvc4+hibernate4分頁(yè)查詢功能實(shí)現(xiàn)
Springmvc+hibernate成為現(xiàn)在很多人用的框架整合,最近自己也在學(xué)習(xí)摸索,由于我們?cè)陂_發(fā)項(xiàng)目中很多項(xiàng)目都用到列表分頁(yè)功能,在此參考網(wǎng)上一些資料,以springmvc4+hibnerate4邊學(xué)邊總結(jié),得出分頁(yè)功能代碼,雖然不一定通用,對(duì)于初學(xué)者來說有參考價(jià)值。
分頁(yè)實(shí)現(xiàn)的基本過程:
一、分頁(yè)工具類
思路:
1.編寫Page類,定義屬性,應(yīng)該包括:查詢結(jié)果集合、查詢記錄總數(shù)、每頁(yè)顯示記錄數(shù)、當(dāng)前第幾頁(yè)等屬性。
2.編寫Page類,定義方法,應(yīng)該包括:總頁(yè)數(shù)、當(dāng)前頁(yè)開始記錄、首頁(yè)、下一頁(yè)、上一頁(yè)、末頁(yè)等方法
代碼如下:
package cn.myic.model;
import java.util.List;
public class Page<E> {
// 結(jié)果集
private List<E> list;
// 查詢記錄總數(shù)
private int totalRecords;
// 每頁(yè)多少條記錄
private int pageSize;
// 第幾頁(yè)
private int pageNo;
/**
* @return 總頁(yè)數(shù)
* */
public int getTotalPages(){
return (totalRecords+pageSize-1)/pageSize;
}
/**
* 計(jì)算當(dāng)前頁(yè)開始記錄
* @param pageSize 每頁(yè)記錄數(shù)
* @param currentPage 當(dāng)前第幾頁(yè)
* @return 當(dāng)前頁(yè)開始記錄號(hào)
*/
public int countOffset(int currentPage,int pageSize){
int offset = pageSize*(currentPage-1);
return offset;
}
/**
* @return 首頁(yè)
* */
public int getTopPageNo(){
return 1;
}
/**
* @return 上一頁(yè)
* */
public int getPreviousPageNo(){
if(pageNo<=1){
return 1;
}
return pageNo-1;
}
/**
* @return 下一頁(yè)
* */
public int getNextPageNo(){
if(pageNo>=getBottomPageNo()){
return getBottomPageNo();
}
return pageNo+1;
}
/**
* @return 尾頁(yè)
* */
public int getBottomPageNo(){
return getTotalPages();
}
public List<E> getList() {
return list;
}
public void setList(List<E> list) {
this.list = list;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNo() {
return pageNo;
}
public void setPageNo(int pageNo) {
this.pageNo = pageNo;
}
}
二、Dao層方法
思路:定義一個(gè)分頁(yè)查詢的方法,設(shè)置參數(shù):當(dāng)頁(yè)頁(yè)號(hào)和每頁(yè)顯示多少條記錄
代碼如下:
/**
* 分頁(yè)查詢
* @param hql 查詢的條件
* @param offset 開始記錄
* @param length 一次查詢幾條記錄
* @return 返回查詢記錄集合
*/
@SuppressWarnings("unchecked")
@Override
public List<Course> queryForPage(int offset, int length) {
// TODO Auto-generated method stub
List<Course> entitylist=null;
try{
Query query = getSession().createQuery("from Course");
query.setFirstResult(offset);
query.setMaxResults(length);
entitylist = query.list();
}catch(RuntimeException re){
throw re;
}
return entitylist;
}
三、Service層方法
思路:
1.定義一個(gè)分頁(yè)查詢的方法,設(shè)置參數(shù):當(dāng)頁(yè)頁(yè)號(hào)和每頁(yè)顯示多少條記錄,返回查詢結(jié)果的分頁(yè)類對(duì)象(Page)
2.通過Dao層,獲取查詢實(shí)體的總記錄數(shù)
3.獲取當(dāng)前頁(yè)開始記錄數(shù)
4.通過Dao層,獲取分頁(yè)查詢結(jié)果集
5.Set入page對(duì)象
代碼如下:
/**
* 分頁(yè)查詢
* @param currentPage 當(dāng)前頁(yè)號(hào):現(xiàn)在顯示的頁(yè)數(shù)
* @param pageSize 每頁(yè)顯示的記錄條數(shù)
* @return 封閉了分頁(yè)信息(包括記錄集list)的Bean
* */
@SuppressWarnings("unchecked")
@Override
public Page queryForPage(int currentPage,int pageSize) {
// TODO Auto-generated method stub
Page page = new Page();
//總記錄數(shù)
int allRow = courseDao.getAllRowCount();
//當(dāng)前頁(yè)開始記錄
int offset = page.countOffset(currentPage,pageSize);
//分頁(yè)查詢結(jié)果集
List<Course> list = courseDao.queryForPage(offset, pageSize);
page.setPageNo(currentPage);
page.setPageSize(pageSize);
page.setTotalRecords(allRow);
page.setList(list);
return page;
}
四、Controller層方法
Controller層的設(shè)計(jì),操作翻頁(yè)查詢時(shí),只需要傳遞當(dāng)前頁(yè)號(hào)參數(shù)即可。
代碼如下:
@RequestMapping(value = "/showAll.do")
public String findAllCourse(HttpServletRequest request,
HttpServletResponse response) {
try {
String pageNo = request.getParameter("pageNo");
if (pageNo == null) {
pageNo = "1";
}
Page page = courseService.queryForPage(Integer.valueOf(pageNo), 10);
request.setAttribute("page", page);
List<Course> course = page.getList();
request.setAttribute("courses", course);
} catch (Exception e) {
e.printStackTrace();
}
return "course/course_list";
}
五、View層jsp展示
jsp頁(yè)面分頁(yè)的幾個(gè)按鈕,根據(jù)當(dāng)前頁(yè)號(hào)的判斷顯示。
代碼如下:
<tr>
<td colspan="6" align="center" bgcolor="#5BA8DE">共${page.totalRecords}條記錄 共${page.totalPages}頁(yè) 當(dāng)前第${page.pageNo}頁(yè)<br>
<a href="${path}/course/showAll.do?pageNo=${page.topPageNo }"><input type="button" name="fristPage" value="首頁(yè)" /></a>
<c:choose>
<c:when test="${page.pageNo!=1}">
<a href="${path}/course/showAll.do?pageNo=${page.previousPageNo }"><input type="button" name="previousPage" value="上一頁(yè)" /></a>
</c:when>
<c:otherwise>
<input type="button" disabled="disabled" name="previousPage" value="上一頁(yè)" />
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${page.pageNo != page.totalPages}">
<a href="${path}/course/showAll.do?pageNo=${page.nextPageNo }"><input type="button" name="nextPage" value="下一頁(yè)" /></a>
</c:when>
<c:otherwise>
<input type="button" disabled="disabled" name="nextPage" value="下一頁(yè)" />
</c:otherwise>
</c:choose>
<a href="${path}/course/showAll.do?pageNo=${page.bottomPageNo }"><input type="button" name="lastPage" value="尾頁(yè)" /></a>
</td>
</tr>
頁(yè)面效果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java多線程CountDownLatch的實(shí)現(xiàn)
本文主要介紹了Java多線程CountDownLatch的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
Bean的管理與SpringBoot自動(dòng)裝配原理解讀
在SpringBoot項(xiàng)目中,啟動(dòng)時(shí)自動(dòng)創(chuàng)建IOC容器并初始化bean對(duì)象,支持通過依賴注入獲取,Bean可以通過name或類型獲取,支持單例和非單例等多種作用域,對(duì)于第三方Bean,推薦在配置類中用@Bean標(biāo)識(shí)方法進(jìn)行定義2024-11-11
Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)IO版本
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)IO版本,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
Kafka多節(jié)點(diǎn)分布式集群搭建實(shí)現(xiàn)過程詳解
這篇文章主要介紹了Kafka多節(jié)點(diǎn)分布式集群搭建實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
SpringBoot Import及自定義裝配實(shí)現(xiàn)方法解析
這篇文章主要介紹了SpringBoot Import及自定義裝配實(shí)現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
分布式系統(tǒng)下調(diào)用鏈追蹤技術(shù)面試題
這篇文章主要為大家介紹了分布式系統(tǒng)下調(diào)用鏈追蹤技術(shù)面試問題合集,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-03-03
IntelliJ?IDEA?2022.2?正式發(fā)布新功能體驗(yàn)
IntelliJ?IDEA?2022.2為遠(yuǎn)程開發(fā)功能帶來了多項(xiàng)質(zhì)量改進(jìn),使其更美觀、更穩(wěn)定,新版本還具有多項(xiàng)值得注意的升級(jí)和改進(jìn),下面跟隨小編一起看看IDEA?2022.2新版本吧2022-08-08
Java利用讀寫的方式實(shí)現(xiàn)音頻播放代碼實(shí)例
這篇文章主要介紹了Java利用讀寫的方式實(shí)現(xiàn)音頻播放代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11

