SSM分页+增删改查
学习资源推荐 https://blog.csdn.net/qq_42813491/article/details/90213353
分页效果图
分页逻辑
- 首先声明一点,分页不管用哪种语言来写,基本逻辑都是大同小异
- 之前我用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);
}
配置文件部分截图
业务层注意点
- 部分截图
控制层注意点(接收当前页)
前台数据请求与渲染
<%@ 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
提取码:biv4