天天看點

SSM分頁+增删改查

SSM分頁+增删改查

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

分頁效果圖

SSM分頁+增删改查
SSM分頁+增删改查

分頁邏輯

  • 首先聲明一點,分頁不管用哪種語言來寫,基本邏輯都是大同小異
  • 之前我用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分頁+增删改查

業務層注意點

  • 部分截圖
    SSM分頁+增删改查

控制層注意點(接收目前頁)

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>
    &nbsp;&nbsp;<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​​

繼續閱讀