JavaWeb分頁的實現(xiàn)代碼實例
這篇文章主要介紹了JavaWeb分頁的實現(xiàn)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
分頁的分類
分頁的實現(xiàn)分為真分頁和假分頁兩種。
1.真分頁(物理分頁):
實現(xiàn)原理: SELECT * FROM xxx [WHERE...] LIMIT ?, 10;
第一個參數(shù)是開始數(shù)據(jù)的索引位置
10是要查詢多少條數(shù)據(jù),即每頁顯示的條數(shù)
優(yōu)點: 不會造成內(nèi)存溢出
缺點: 翻頁的速度比較慢
2.假分頁(邏輯分頁):
實現(xiàn)原理: 一次性將所有的數(shù)據(jù)查詢出來放在內(nèi)存之中,每次需要查詢的時候就直接從內(nèi)存之中去取出相應(yīng)索引區(qū)間的數(shù)據(jù)
優(yōu)點: 分頁的速度比較快
缺點: 可能造成內(nèi)存溢出
分頁的一些術(shù)語:
- -- 數(shù)據(jù)總條數(shù): totalCount : select count(1) from t_user;
- -- 每頁顯示條數(shù):pageSize
- -- 總頁數(shù):totalPage
- -- 當前頁:currPage
- -- 起始索引: startIndex
-- 通過當前頁碼查詢第幾頁的數(shù)據(jù)
select * from t_user limit 0, 5; -- 頁碼 1
select * from t_user limit 5, 5; -- 頁碼 2
select * from t_user limit 10, 5; -- 頁碼 3
-- 公式:startIndex = (currPage - 1) * pageSize
-- 計算一共有多少頁
-- 方法一:result = totalCount%pageSize,如果余數(shù)result為0,
-- totalPage = totalCount / pageSize
-- 如果余數(shù)result不為0,
-- totalPage = totalCount / pageSize + 1;
-- 方法二:totalPage = (totalCount + pageSize - 1) / pageSize
Pageing工具類
public class PaginationBean<T> { private List<T> dataList; private int currPage; private int totalPage; public List<T> getDataList() { return dataList; } public void setDataList(List<T> dataList) { this.dataList = dataList; } public int getCurrPage() { return currPage; } public void setCurrPage(int currPage) { this.currPage = currPage; } public int getTotalPage() { return totalPage; } public void setTotalPage(int totalPage) { this.totalPage = totalPage; } }
Servlet
@WebServlet("/showUserList") public class ShowUserListServlet extends HttpServlet implements Servlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8"); String operation = request.getParameter("operation"); String currPageStr = request.getParameter("currPage"); int currPage = 0; IUserService userSevice = new UserServiceImpl(); int totalPage = userSevice.getTotalPage(); if ("首頁".equals(operation) || operation == null || currPageStr == null || currPageStr.length() == 0) { currPage = 1; } else if ("上一頁".equals(operation)) { currPage = Integer.parseInt(currPageStr) - 1; if (currPage <= 0) { currPage = 1; } } else if ("下一頁".equals(operation)) { currPage = Integer.parseInt(currPageStr) + 1; if (currPage >= totalPage) { currPage = totalPage; } } else { currPage = totalPage; } List<TestUserBean> userList = userSevice.getUserListByCurrPage(currPage); PaginationBean<TestUserBean> pageBean = new PaginationBean<TestUserBean>(); pageBean.setDataList(userList); pageBean.setCurrPage(currPage); pageBean.setTotalPage(totalPage); request.setAttribute("page", pageBean); request.getRequestDispatcher("/userList.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%-- 引入JSTL --%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <style> table { border-collapse: collapse; } </style> </head> <body> <table border="1"> <tr> <th>ID</th> <th>姓名</th> <th>密碼</th> <th>身份證號</th> </tr> <c:forEach items="${page.dataList }" var="user"> <tr> <td>${user.id }</td> <td>${user.name }</td> <td>${user.pwd }</td> <td>${user.idCard }</td> </tr> </c:forEach> </table> <span>第${page.currPage }頁/共${page.totalPage }頁</span> <br> <br> <form action="showUserList" method="get"> <input type="submit" name="operation" value="首頁"> <input type="submit" name="operation" value="上一頁"> <input type="submit" name="operation" value="下一頁"> <input type="submit" name="operation" value="尾頁"> <input type="hidden" name="currPage" value="${page.currPage }"> </form> </body> </html>
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot項目統(tǒng)一枚舉轉(zhuǎn)換實踐過程
文章介紹了在Spring Boot項目中統(tǒng)一枚舉轉(zhuǎn)換的實踐,通過使用自定義的父枚舉接口和AttributeConverter、ConverterFactory、JsonSerializer和JsonDeserializer等工具,實現(xiàn)了枚舉與數(shù)據(jù)庫、請求參數(shù)、響應(yīng)參數(shù)和消息參數(shù)之間的自動轉(zhuǎn)換2024-12-12spring cloud alibaba Nacos 注冊中心搭建過程詳解
這篇文章主要介紹了spring cloud alibaba Nacos 注冊中心搭建過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10java虛擬機深入學(xué)習(xí)之內(nèi)存管理機制
java虛擬機在程序運行時將內(nèi)存劃分為多個區(qū)域,每個區(qū)域作用,生命周期各不相同,下面這篇文章主要給大家介紹了關(guān)于java虛擬機深入學(xué)習(xí)之內(nèi)存管理機制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2018-11-11基于@JsonSerialize和@JsonInclude注解使用方法
這篇文章主要介紹了@JsonSerialize和@JsonInclude注解使用方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10JAVA三種攔截方式詳解(原生過濾器Filter、springMVC攔截器、aop切面)
在Java開發(fā)中方法攔截是一種常見的技術(shù),可以用于在方法執(zhí)行前后添加額外的邏輯或修改方法的行為,這篇文章主要給大家介紹了關(guān)于JAVA三種攔截方式的相關(guān)資料,文中介紹的方式分別是原生過濾器Filter、springMVC攔截器、aop切面,需要的朋友可以參考下2024-05-05k8s部署springboot實現(xiàn)前后端分離項目
本文主要介紹了k8s部署springboot實現(xiàn)前后端分離項目,主要包括配置文件、鏡像構(gòu)建和容器編排等方面,具有一定的參考價值,感興趣的可以了解一下2024-01-01