SSM分頁+增删改查
- 分頁效果圖
- 分頁邏輯
- 代碼解釋
- 資料通路層注意點
- CourseMapper和CourseMapper.xml參數設定
- 業務層注意點
- 控制層注意點(接收目前頁)
- 前台資料請求與渲染
- 源碼和資料庫
分頁效果圖

分頁邏輯
- 首先聲明一點,分頁不管用哪種語言來寫,基本邏輯都是大同小異
- 之前我用php寫了一個分頁,有需要的大兄弟可以參考參考
- 下面進入正題,貼出分頁核心代碼
package cn.com.systop.po;
import java.util.List;
public class PageBean {
private int curPage = 1; // 目前頁數,預設1
private int pageSize ; // 每頁顯示的記錄數
private int totalPage; // 總頁數,計算得出
private int totalRecords; // 總記錄數,資料庫查詢得出
private int startIndex; // 開始索引,(curPage-1)*pageSize
private List list; // 資料庫查詢出來的分頁資料集合
private int prePage;// 上一頁
private int nextPage;// 下一頁
public int getPrePage() {
prePage = curPage - 1;
if (prePage < 1) {
prePage = 1;
}
return prePage;
}
public void setPrePage(int prePage) {
this.prePage = prePage;
}
public int getNextPage() {
nextPage = curPage + 1;
if (nextPage > totalPage) {
nextPage = totalPage;
}
return nextPage;
}
public void setNextPage(int nextPage) {
this.nextPage = nextPage;
}
public List getList() {
return list;
}
public void setList(List list) {
this.list = list;
}
public PageBean(int curPage, int pageSize, int totalRecords) {
this.curPage = curPage;
this.pageSize = pageSize;
this.totalRecords = totalRecords;
// #1 總分頁數
this.totalPage = totalRecords % pageSize == 0 ? (totalRecords / pageSize) : (totalRecords / pageSize + 1);
// #2 開始索引
this.startIndex = (this.curPage - 1) * pageSize;
}
public int getCurPage() {
return curPage;
}
public void setCurPage(int curPage) {
this.curPage = curPage;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalPage() {
return totalPage;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
public int getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(int totalRecords) {
this.totalRecords = totalRecords;
}
public int getStartIndex() {
return startIndex;
}
public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
}
}
代碼解釋
- 分頁通用的參數
- 目前頁curPage
- 頁容量pageSize
- totalRecords; // 總記錄數,資料庫查詢得出
- totalPage; // 總頁數,(總記錄數/頁容量)
- startIndex; // 開始索引,(curPage-1)*pageSize
- 分頁原理
- sql語句中limit的恰當使用
- 示例
- select * from course limit 0,2,第一頁,兩條資料,curPage =1,pageSize=2
- select * from course limit 2,2,第二頁,兩條資料,curPage =2,pageSize=2
- select * from course limit 4,2,第三頁,兩條資料,curPage =3,pageSize=2
- select * from course limit 6,2,第四頁,兩條資料,curPage =4,pageSize=2
- 資料分析
- 以上資料可以看出。limit使用需要兩個值,即查詢起始頁碼和頁容量,後者固定不變
- 如此,隻需要求得起始頁碼,公式startIndex=(curPage-1)*pageSize,到此ok
- 翻頁邏輯
- 上一頁,下一頁,首頁,末頁,跳轉指定頁巴拉巴拉的,本質就是目前頁的傳遞
- 前台提供curPage ,預設為1,背景根據傳遞過來的參數計算出開始索引,查詢資料庫後将結果傳回
- 前台将傳回的結果渲染到界面上
- 點選 上一頁,目前頁-1,若curPage<1,讓curPage=1
- 點選 下一頁,目前頁+1,若curPage>總頁數,讓curPage=總頁數
- 當第一頁時,不顯示首頁按鈕(參考上方效果圖)
- 當第末頁時,不顯示末頁按鈕(自行補充,或者全部自定義)
資料通路層注意點
CourseMapper和CourseMapper.xml參數設定
package cn.com.systop.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import cn.com.systop.po.Course;
public interface CourseMapper {
//方法見名知意,不多注釋了
public int findTotalRecords() ;
//注意這裡和CourseMapper.xml檔案中對應位置的書寫,參數傳遞也是關鍵
public List<Course> pageList(@Param("startIndex") int startIndex, @Param("pageSize")int pageSize) ;
public void add(Course course);
public void delete(String courseid);
public Course findById(String courseid);
public void edit(Course course);
}
配置檔案部分截圖
業務層注意點
- 部分截圖
SSM分頁+增删改查
控制層注意點(接收目前頁)
前台資料請求與渲染
<%@ page language="java" pageEncoding="utf-8" import="java.util.*" import="cn.com.systop.po.*"%>
<%@ 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>查詢清單</title>
</head>
<body>
<table border="1" width="600">
<tr>
<td>courseid</td>
<td>coursename</td>
<td>period</td>
<td>build</td>
<td>操作</td>
</tr>
<c:forEach items="${pageBean.list}" var="c">
<tr>
<td>${c.courseid }</td>
<td>${c.coursename }</td>
<td>${c.period}</td>
<td>${c.build}</td>
<td><a onclick="if(confirm('确定删除嗎')) window.location='delete.action?courseid=${c.courseid}'">删除</a>
<a href="findById.action?courseid=${c.courseid}">修改</a></td>
</tr>
</c:forEach>
</table>
<div class="top">
<c:if test="${pageBean.curPage==1}">
第${pageBean.curPage}頁/ 共${pageBean.totalPage}頁
</c:if>
<c:if test="${pageBean.curPage!=1}">
<a href="findWithPage.action?curPage=1">首頁</a>
第${pageBean.curPage}頁/ 共${pageBean.totalPage}頁
</c:if>
<a href="findWithPage.action?curPage=${pageBean.prePage}" >上一頁</a>
<a href="findWithPage.action?curPage=${pageBean.nextPage}" >下一頁</a>
<a href="findWithPage.action?curPage=${pageBean.totalPage}">末頁</a>
</div>
<p><a href="add.jsp">添加</a></p>
</body>
</html>
- 請求路徑findWithPage.action?curPage=?
- 資料集合都在pageBean.list裡邊,用jstl标簽庫forEach循環取出填充到界面即可
源碼和資料庫
連結:https://pan.baidu.com/s/1sMpHLl26iOkKjBPRBDABlQ