SSM分页+增删改查

版权声明:所有博客本人原创,转载注明出处即可 https://blog.csdn.net/qq_42813491/article/details/87717776

分页效果图

在这里插入图片描述

在这里插入图片描述

分页逻辑

  • 首先声明一点,分页不管用哪种语言来写,基本逻辑都是大同小异
  • 之前我用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>
		&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
提取码:biv4

猜你喜欢

转载自blog.csdn.net/qq_42813491/article/details/87717776