java ee 分页_【JavaEE】JavaEE分页实践
作者:鄒峰立,微博:zrunker,郵箱:zrunker@yahoo.com,微信公眾號:書客創作,個人平臺:www.ibooker.cc。
本文選自書客創作平臺第56篇文章。閱讀原文 。
書客創作
分頁功能是現在網站開發當中,在常見不過的功能,幾乎是所有網站都會用到這么一個功能,而實現分頁功能的方式也很多。
例如:采用subList()方法進行分割,簡單來說就是先查詢數據庫中所有相關的數據,將查詢出來的數據保存到list列表當中,然后通過list.subList(fromIndex, toIndex);進行拆分每一頁要顯示的數據。
ArrayList allList = new ArrayList<>();
allList.subList(fromIndex, toIndex);
但是采用這種方式有一個很大的弊端,就是當數據庫中有很多數據(上百萬)的時候,那么第一次獲取數據將會非常緩慢,而且獲取出來的數據也非常龐大,這么龐大的數據也許用戶不會全部查看,浪費大量資源。
那么今天我要實現的一種分頁方式是通過數據庫分頁查詢(MySQL:limit、Oracle:rownum)結合前端框架jQuery Pagination來實現,在本實例中采用的數據庫是MySQL。
jQuery Pagination簡介
官方:When you have a a large list of items (e.g. search results or news articles), you can display them grouped in pages and present navigational elements to move from one page to another. This plugin creates these navigational elements.
簡單來說該插件就是用來將一個龐大的列表,分頁顯示的。
參數介紹:
callback:回調方法,是用戶點擊分頁(上一頁,下一頁等)的時候執行的函數。
current_page:當前頁。
items_per _page:每個頁面的數量,最小值1。注意:這個值只計算頁面的數量。默認值:10。
link_to:鏈接分頁鏈接的目標。通常通過一個onclick事件觸發頁面選擇。如果鏈接包含字符串id,它將替換為頁碼。默認值:#。
num_display _entries:最大數量的頁碼鏈接。設置為0顯示一個簡單的“前/下一個”導航。默認值:11。
next_text:下一頁,默認值:next。
next_show _always:是否總是展示下一頁,默認true。
prev_text:上一頁。
prev_show _always:是否總是展示上一頁,默認true。
num_edge _entries:如果這個數字設置為1時,第一個和最后一個鏈接頁面總是顯示,獨立于當前位置和能見度num_display _entries設定的約束。你可以設置更大數字顯示鏈接。默認值:0。
ellipse_text:頁碼之間的省略號, 默認:...。
load_first _page:頁面加載完后是否加載第一頁數據,true/false。
MySQL分頁查詢,后臺處理
MySQL分頁查詢其實很簡單只需要使用limit關鍵字即可,通常為了優化SQL,會在limit中添加order by。
SELECT
FROM tablenameORDER BY id DESC
LIMIT limit_start, limit_count
同時還要查詢數據庫中該數據的總數:
SELECT IFNULL(COUNT(id), 0) FROM tablename
為了配合前端插件,需要在后臺寫一個dto,在這個dto類中至少需要包括每頁顯示多少條記錄,當前頁,總記錄,一共多少頁,要顯示的數據列表。
public class Pager {
private int pageSize;// 每頁顯示多少條記錄
private int currentPage;// 當前第幾頁數據
private int totalRecord;// 一共多少條記錄
private int totalPage;// 一共多少頁
private List dataList;// 要顯示的數據
// getter/setter方法
}
泛型T是要顯示的數據對象。
通常頁面上傳遞過來的數據是頁碼page (currentPage)和每頁要顯示的數據(pageSize),所以我們要重構SQL查詢的參數,LIMIT limit_start, limit_count。
int limit_start= (page -1) * pageSize;
int limit_count= pageSize;
通過相應的SQL語句能夠查詢出當前頁要顯示的數據,和總記錄數。
// 查詢列表數據總數
totalRecord = articleDao.queryArticleDataListCount(aIsdelete, aIsallow);
totalPage = totalRecord / pageSize;// 總頁數
if (totalRecord % pageSize != 0) {
totalPage++;
}
總頁數=總記錄/每頁數量。但是這里要注意一個細節,計算總頁數的時候,當數據不滿一頁顯示的數據的時候,要將總頁數增加1。
這樣就把dto中類所需要的所有變量值得到:
currentPage,pageSize由頁面傳遞過來。totalRecord,dataList由數據查詢得到。totalPage是計算得到。
Web頁面處理,三步走
首頁jquery.pagination插件是依賴jQuery,所以在頁面中引入jquery和jquery.pagination。
其次添加div用來顯示頁碼,同時引入分頁樣式:
最后是設置jquery.pagination參數和回調方法:
$(function() {
$("#News-Pagination").pagination(${pager.totalRecord}, {
items_per_page : ${pager.pageSize},// 每頁顯示多少條記錄
current_page : ${pager.currentPage} - 1,// 當前頁數
num_display_entries : 5,// 分頁顯示條目數
next_text : "下一頁",
prev_text : "上一頁",
num_edge_entries : 0,// 連接分頁主體,顯示的條目數
load_first_page : false,
callback : handlePaginationClick
});
});
function handlePaginationClick(new_page_index, pagination_container) {
var url = "web/article/list/" + (new_page_index + 1);
window.location.href = url;
return false;
};
最后看看最終實現效果:
分頁效果圖
微信公眾號:書客創作
總結
以上是生活随笔為你收集整理的java ee 分页_【JavaEE】JavaEE分页实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 计算时间重叠_Python
- 下一篇: java spring异常处理_Java