分页实现

  • 前言
  • 分页准备
    • 数据准备
    • 定义一个BasePage类用于封装分页数据
  • 前端分页栏
  • 在用户页面引入
  • 后端请求实现
    • 控制器
    • service接口
    • service实现类
    • 修改user.jsp中获取数据方式
  • 测试

前言

在前面的文章里实现了用户信息的CRUD操作,本文主要介绍分页查询的实现
我们知道分页目的是分批次的响应用户的请求。分页有前端页面的分页栏和后端的分页获取数据源中的数据两部分组成。

分页准备

数据准备

在数据库中插入大量的数据,为分页做准备

定义一个BasePage类用于封装分页数据

/*** 封装分页的基本信息* @author JustinNeil*/
public class BasePage {// 当前页protected int pageNum = 1;// 每页显示的条数protected int pageSize = 5;public int getPageNum() {return pageNum;}public void setPageNum(int pageNum) {this.pageNum = pageNum;}public int getPageSize() {return pageSize;}public void setPageSize(int pageSize) {this.pageSize = pageSize;}
}

UserDto继承BasePage类

前端分页栏

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%><div>共有${pageModel.total }条记录,共${pageModel.pages }页,每页<select name="pageSize" onchange="changePageSize(this.value)" style="width: 50px;"><option value="10" ${pageModel.pageSize==10?"selected":"" }>10</option><option value="20"  ${pageModel.pageSize==20?"selected":"" }>20</option><option value="50"  ${pageModel.pageSize==50?"selected":"" }>50</option><option value="100"   ${pageModel.pageSize==100?"selected":"" }>100</option></select>  条记录,当前${pageModel.pageNum }/${pageModel.pages }页,<a href="javascript:homePage()">首页</a>|<a href="javascript:frontPage()">上一页</a>|<a href="javascript:nextPage()">下一页</a>|<a href="javascript:lastPage()">尾页</a>|转到<select name="pageNum" onchange="goPage(this.value)" style="width: 50px;"><c:forEach begin="1" end="${pageModel.pages }" var="i"><option value=${i }  ${pageModel.pageNum==i?"selected":"" }>${i }</option></c:forEach></select></div><script type="text/javascript">function homePage(){document.getElementById("pageNum").value=1;document.getElementById("pager").submit();//表单提交}function frontPage(){document.getElementById("pageNum").value=${pageModel.pageNum<=1? 1 : pageModel.pageNum-1 };document.getElementById("pager").submit();//表单提交}function nextPage(){document.getElementById("pageNum").value=${pageModel.pageNum>=pageModel.pages?pageModel.pages:pageModel.pageNum+1 };document.getElementById("pager").submit();//表单提交}function lastPage(){document.getElementById("pageNum").value=${pageModel.pages };document.getElementById("pager").submit();//表单提交}function goPage(cur_page){document.getElementById("pageNum").value=cur_page;document.getElementById("pager").submit();//表单提交}function changePageSize(cur_pageSize){document.getElementById("pageSize").value=cur_pageSize;document.getElementById("pager").submit();//表单提交}</script>

在用户页面引入

        <div class="inline pull-right page" style="margin-top: 20px;"><form action="/user/queryPage" id="pager"><input type="hidden" name="pageSize" id="pageSize" value="${pageModel.pageSize }"><input type="hidden" name="pageNum" id="pageNum" value="${pageModel.pageNum }"></form><jsp:include page="/pageBar.jsp"></jsp:include></div>

后端请求实现

后端分页我们通过mybatis的分页插件PageHelper来实现,我们需要在mybats的配置文件中添加分页拦截器:

    <plugins><!-- com.github.pagehelper为PageHelper类所在包名 --><plugin interceptor="com.github.pagehelper.PageHelper"><property name="dialect" value="mysql" /><!-- 该参数默认为false --><!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 --><!-- 和startPage中的pageNum效果一样 --><property name="offsetAsPageNum" value="true" /><!-- 该参数默认为false --><!-- 设置为true时,使用RowBounds分页会进行count查询 --><property name="rowBoundsWithCount" value="true" /><!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 --><!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型) --><property name="pageSizeZero" value="true" /><!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 --><!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 --><!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 --><property name="reasonable" value="false" /><!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 --><!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 --><!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值 --><property name="params" value="pageNum=start;pageSize=limit;" /><!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page --><property name="returnPageInfo" value="check" /></plugin></plugins>

控制器

@RequestMapping("/queryPage")
public String queryPage(UserDto dto,Model model){PageInfo<User> pageModel = userService.queryPage(dto);model.addAttribute("pageModel", pageModel);return "user/user";
}

service接口

    /*** 分页带条件查询用户信息* @param dto* @return*/public PageInfo<User> queryPage(UserDto dto);

service实现类

    @Overridepublic PageInfo<User> queryPage(UserDto dto) {PageHelper.startPage(dto.getPageNum(), dto.getPageSize());List<User> list = this.queryUser(dto.getUser());PageInfo<User> pageInfo = new PageInfo<User>(list);return pageInfo;}

修改user.jsp中获取数据方式

测试

SSM项目实战之十四:分页实现相关推荐

  1. Vue + Spring Boot 项目实战(十五):动态加载后台菜单

    重要链接: 「系列文章目录」 「项目源码(GitHub)」 本篇目录 前言 一.后端实现 1.表设计 2.pojo 3.菜单查询接口(树结构查询) 二.前端实现 1.后台页面设计 2.数据处理 3.添 ...

  2. 品优购项目笔记(十四):微信支付

    品优购项目笔记(十四) 订单 订单三张表关系 提交订单 二维码 介绍 优势 容错级别 qrious二维码生成插件 微信支付 微信支付流程 项目支付流程 生成支付链接 查询是否支付成功 订单 订单三张表 ...

  3. 自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1)

    自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1) 发表于CVPR2019的PointPillars是目前比较受业内认可的激光雷达三维检测算法, ...

  4. App项目实战之路(四):UI篇

    原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/practice/20160903 微信订阅号:keeganlee_me 写于2016- ...

  5. Dapr + .NET 实战(十四)虚拟机集群部署 mDNS + Consul

    前面我们说了在单机模式下和K8S集群下的Dapr实战,这次我们来看看如何在不使用K8S的情况下,在一个传统的虚拟机集群里来部署Dapr. 1.环境准备 我们准备两台centos7虚拟机 Dapr1:1 ...

  6. SSM项目实战:酒店管理系统

    使用的技术栈:Spring+SpringMVC+mybatis+Mysql+layui+Maven Maven 项目结构.项目配置项为: 服务器:apache-tomcat-9.0.0.M26 (必须 ...

  7. Spring Boot + vue-element 开发个人博客项目实战教程(四、数据库搭建和配置)

    前言 java项目已经创建好了,接下来我们要准备数据库了,数据库是干嘛的相信大家都知道了,我在这就不说了,我们需要做的就是在电脑上安装mysql数据库. 附菜鸟教程的MySQL基础学习教程:https ...

  8. JavaCV的摄像头实战之十四:口罩检测

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是<JavaCV的摄像头实战> ...

  9. 机器学习实战(十四)利用SVD简化数据

    第十四章 利用SVD简化数据 14.1 SVD的应用 14.1.1 隐形语义索引 14.1.2 推荐系统 14.2 矩阵分解(SVD矩阵分解) 14.3 利用python实现SVD 14.4 基于协同 ...

  10. SSM项目实战之二十四:表单数据校验

    表单数据校验 前言 前端页面 测试 前言 在前面的文章中我们并没有对表单提交的数据做校验,本文主要以添加用户为例介绍如何对表单数据添加校验. 前端页面 首先把原先的提交按钮换掉,设置一个点击函数 为表 ...

最新文章

  1. 我练习项目眼中的 vue
  2. 在js中获取input中的value
  3. matlab——sparse函数和full函数
  4. PHP截取IE浏览器并缩小原图的方法
  5. 现在要吃软饭的,都这么明目张胆了吗?
  6. RedShift到MaxCompute迁移实践指导
  7. 十恶不赦到底是哪十恶?
  8. cmos和ttl_【转】CMOS与TTL电路的区别
  9. OpenCV——CvMatchShapes函数
  10. Windows 2008 限制IP连接方法
  11. Python被誉为神奇的“胶水语言”,到底神奇在哪?
  12. C++,error c2662 cannot convert 'this' pointer from 'const A' to 'A '
  13. LTE 调制与解调——QPSK,16QAM,64QAM误码率比较
  14. MDESIGN-设计标准化系统
  15. STR鉴定原理、流程已经报告数据解读指南
  16. PySide6 : Qt for Python 教程
  17. PyPI--python软件仓储库
  18. polyfit及poly1d多项式拟合
  19. java 在线excel_Java实现最简单的在线打开保存Excel文件
  20. 12月编程语言排行榜公布啦~

热门文章

  1. 雷达相关书籍学习顺序推荐
  2. 8Manage助力迈迪思创项目业务一体化
  3. 00截断上传绕过_Getshell | 文件上传绕过整理
  4. 基于片内Flash的提示音播放程序
  5. 单片机仿真软件Proteus安装时遇到的问题
  6. STM32神舟III号 驱动直流电机学习(四 )
  7. 北斗卫星导航系统基础篇之(三)——北斗缩略词详解
  8. android 按钮救星,按键救星下载-按键救星专业版(Button Savior Pro) 安卓版v2.1.1-PC6安卓网...
  9. 2019.11.21工作记录——windriver生成PCI驱动32位向64位移植
  10. dial协议服务器可以禁吗,Radius协议   1812  radius