1.简单思路

  

  这是最常见的分页格式,分析一下我们需要传什么数据给前端吧! 首先是左边下面的总共几条记录,然后是右边的当前页面,然后就是一些你所需要展示的数据。对了每页显示多少条是不也得控制下,下面的显示页码数,这里显示了五条(1,2,3,4,5),你也可以选择只显示三条(1,2,3)。

2.构造传给页面的POJO

 

package com.Dy.Pojo;

import java.util.List;

/**
* 分页信息
*
* @author 小丁同学
*
*/
public class PageInfo<T> {
// 你页面需要展示的集合
private List<T> list;
// 显示的总记录数
private Integer totalNum;
// 总页数
private Integer totalPage; // 当前页
private Integer currentPage;
// 每页显示的数目 (为了防止硬编码可以写在配置文件中)
private Integer pageSize; // 下面两个就是显示的页码 比如start为1 pageNo为5,那么显示的页码数就是1,2,3,4,5
private Integer start;
private Integer pageNo; public PageInfo(Integer totalNum, Integer currentPage, Integer pageSize, Integer pageNo) {
this.totalNum = totalNum;
this.currentPage = currentPage;
this.pageSize = pageSize;
/*this.pageNo = pageNo;*/ // 计算总页数
if (totalNum % this.pageSize == 0)
this.totalPage = totalNum / this.pageSize;
else
this.totalPage = (totalNum / this.pageSize) + 1; this.start = currentPage;
// 比如设置了5条,如果总页数都只有四条,那么肯定都是全是显示哦
if (pageNo+currentPage-1>=this.totalPage)
this.pageNo = pageNo;
else this.pageNo = this.totalPage-currentPage+1;
} public List<T> getList() {
return list;
} public void setList(List<T> list) {
this.list = list;
} public Integer getTotalNum() {
return totalNum;
} public void setTotalNum(Integer totalNum) {
this.totalNum = totalNum;
} public Integer getTotalPage() {
return totalPage;
} public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
} public Integer getCurrentPage() {
return currentPage;
} public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
} public Integer getPageSize() {
return pageSize;
} public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
} public Integer getStart() {
return start;
} public void setStart(Integer start) {
this.start = start;
} public Integer getPageNo() {
return pageNo;
} public void setPageNo(Integer pageNo) {
this.pageNo = pageNo;
} }
package com.Dy.Pojo;

public class User {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
} }

3.构造Dao(可以使用逆向工程,这里为了展示就手打接口和xml了)

package com.Dy.Mapper;

import java.util.List;

import com.Dy.Pojo.User;

public interface UserMapper {
public List<User> findAllUsers();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 这里的namespace是为了去绑定那个接口,让xml文件知道对应的是哪个接口 -->
<mapper namespace="com.Dy.Mapper.UserMapper"> <!-- id于接口的名字一样 -->
<select id="findAllUsers" resultType="com.Dy.Pojo.User">
select * from user
</select> </mapper>

4.构造Service

 

package com.Dy.Service;

import com.Dy.Pojo.PageInfo;
import com.Dy.Pojo.User; public interface UserService {
public PageInfo<User> findAllUsersByPage(Integer currentPage,Integer pageSize);
}
package com.Dy.Service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import com.Dy.Mapper.UserMapper;
import com.Dy.Pojo.PageInfo;
import com.Dy.Pojo.User; @Service
public class UserServiceImpl implements UserService { @Autowired
private UserMapper usermapper; @Override
public PageInfo<User> findAllUsersByPage(Integer currentPage, Integer pageSize) {
List<User> users = usermapper.findAllUsers(); PageInfo<User> pageInfo = new PageInfo<>(users.size(), currentPage, pageSize, 5); //判断是否是最后一页,如果最后一页就显示最后一页的几条,不是最后一页就显示pageSize条
if(currentPage==pageInfo.getTotalPage())
pageInfo.setList(users.subList((currentPage-1)*pageSize, users.size()));
else
pageInfo.setList(users.subList((currentPage-1)*pageSize, (currentPage-1)*pageSize+pageSize));
return pageInfo;
} }

5.JSP部分

                <div class="am-fr">
<ul class="am-pagination">
<li ><a href="Users?currentPage=${page.currentPage-1 }">«</a></li>
<c:forEach begin="${page.currentPage }" end="${page.pageNo }" var="i">
<li><a href="Users?currentPage=${i }">${i }</a></li>
</c:forEach>
<li><a href="#">»</a></li>
</ul>
</div>
</div>
                                <tbody>
<c:forEach items="${page.list }" var="page">
<tr>
<td><input type="checkbox" /></td>
<td>${page.id }</td>
<td>${page.username }</td>
<td>${page.password }</td>
<td>
<div class="am-btn-toolbar">
<div class="am-btn-group am-btn-group-xs">
<button
class="am-btn am-btn-default am-btn-xs am-text-secondary">
<span class="am-icon-pencil-square-o"></span> 编辑
</button>
<button
class="am-btn am-btn-default am-btn-xs am-hide-sm-only">
<span class="am-icon-copy"></span> 复制
</button>
<button
class="am-btn am-btn-default am-btn-xs am-text-danger am-hide-sm-only">
<span class="am-icon-trash-o"></span> 删除
</button>
</div>
</div>
</td>
</tr>
</c:forEach> </tbody>
</table>

6.页面展示

7.后期完善

  1.分页逻辑没有考虑增加和删除 不知道会不会有问题

  2.PageInfo中的pageNo字段设计的很不合理,最后一页了 就只显示一个 , 任需完善。

  3.可以把Service分页逻辑再封装成一个方法,增加代码重用

SSM实现简单后台分页的更多相关文章

  1. springMVC+spring+MyBatis(SSM)的简单配置

    SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中: Spring是一 ...

  2. 基于IDEA采用springboot+Mybatis搭建ssm框架简单demo项目的搭建配置流程

    一.通过对比可以原始SSM搭建流程,spring boot省去了大量的配置,极大提高了开发者的效率.原始SSM框架搭建流程见博客: https://www.cnblogs.com/No2-explor ...

  3. ssm整合简单例子

    1.首先新建一个maven项目 2.在pom.xml文件中加入以下代码引入包 <properties> <project.build.sourceEncoding>UTF-8& ...

  4. ssm框架搭建(下) 简单案例

    前言 这段时间没有更新博客,一直想做一个基于ssm的简单的项目.经过多次的尝试,终于实现了简单的增删查改功能了. 正文 由于前端的技术不是很熟悉,经过多方的查阅,使用了bootstrap的样式,来使界 ...

  5. (原创)ssm sql 例子(freemarker+jsp)

    ssm整合地址:http://www.cnblogs.com/xiaohuihui96/p/6104351.html 接下讲解一个插入语句的流程和顺带讲解freemarker+jsp视图的整合 初次接 ...

  6. ssm+maven 框架整合

    开篇简言:maven的存在让ssm框架简单了一个量级,BaseDao的存在又让项目简化了一个量级,希望看到这篇文章的都能深入的了解上面两项,好了,进入主题,构造一个ssm框架 1.准备工具  mave ...

  7. spring boot简单的小demo(适合于初学者)

    import com.example.demo2.com.example.dao.ShopDao; import com.example.demo2.com.example.entity.Shops; ...

  8. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

  9. 一个ssm综合小案例-商品订单管理----写在前面

    学习了这么久,一直都是零零散散的,没有把知识串联起来综合运用一番 比如拦截器,全局异常处理,json 交互,RESTful 等,这些常见技术必须要掌握 接下来呢,我就打算通过这么一个综合案例把这段时间 ...

随机推荐

  1. 添加自己的component

    在之前讲解esp-idf的文件结构时,曾经讲过component是esp-idf集成的功能块,这篇文章就来讲解下,如何在esp-idf 中添加自己的component. STEP1; 创建compon ...

  2. Ngui分辨率适配

    必备知识点 1.分辨率适配必然是Orthographic Camera 2.Camera下对应的“Size”(图1)属性大小的理解:当前摄像机高度 = Size * 2 * UnityUnit(Uni ...

  3. 迁移桌面程序到MS Store(1)——通过Visual Studio创建Packaging工程

    之前跑去做了一年多的iOS开发,被XCode恶心得不行.做人呢,最重要的是开心.所以我就炒了公司鱿鱼,挪了个窝回头去做Windows开发了.        UWP什么的很久没有正儿八经写了,国内的需求 ...

  4. vue-cli脚手架项目按需引入elementUI

    https://www.jianshu.com/p/40da0ba35ac1 Couldn't find preset "es2015" relative to directory ...

  5. HDFS环境搭建(单节点配置)

    [参考文章]:hadoop集群搭建(hdfs) 1. Hadoop下载 官网下载地址: https://hadoop.apache.org/releases.html,进入官网根据自己需要下载具体的安 ...

  6. Spark基础脚本入门实践1

    1.创建数据框架 Creating DataFrames val df = spark.read.json("file:///usr/local/spark/examples/src/mai ...

  7. JavaScript “跑马灯”抽奖活动代码解析与优化(一)

    最近的项目中做了一个"跑马灯"的抽奖特效插件.上篇文章已经分享过html和css 的相关知识.这篇文章主要分享一些 JavaScript 相关的知识.这几天在写这篇文章的时候,也顺 ...

  8. 从零开始学 Web 之 移动Web(一)屏幕相关基本知识,调试,视口,屏幕适配

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  9. php网页上传文件到Ubuntu服务器(input type=fire)- 赖大大

    直接上代码: <form enctype="multipart/form-data" method="post" action=""& ...

  10. 【杂谈】线程中断——Interrupt

    前言 以前有一个错误的认识,以为中断操作都会抛出异常,后来才发现并不是这样,所以今天就来做一个关于中断的总结. 如何关闭线程 已被弃用的Stop方法 早期,Thread类中有一个stop方法,用于强行 ...