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. 用嵌入式块RAM IP核配置一个双口RAM

    本次设计源码地址:http://download.csdn.net/detail/noticeable/9914173 实验现象:通过串口将数据发送到FPGA 中,通过quartus II 提供的in ...

  2. POJ3422费用流

    Description: 一个N * N的奖赏地图,你可以走k次这个地图,但是每一次你走过一个有分的节点,你获得得分,但这个节点的得分都要清零,问你走k次地图的最大得分 Solution: 把得分变成 ...

  3. Kaldi如何准备自己的数据

    Introduction 跑完kaldi的一些脚本例子,你可能想要自己用Kaldi跑自己的数据集.这里将会阐述如何准备好数据. run.sh较上的部分是有关数据准备的,通常local与数据集相关. 例 ...

  4. Android 发展思路

    1. 做一个有 ‘特色’ 的程序员 Android 开发,本身并不是一个可以走得多远的方向,真正有价值的地方在于与具体的业务方向结合,比如:Android 与音视频技术,Android 与智能硬件交互 ...

  5. mysql快熟入门

    前提:假设我们的电脑或服务器已经正确安装了mysql服务器 一:连接和断开mysql服务器 1.1连接数据库服务器 shell> mysql -u user -p (user用户名通常为root ...

  6. setting-mirrorO以及下载jar包流程简介

    mirrorOf常见的几种配置如下 1.* 2.repo3 3.repo1,repo2,*,!repo3 4.external:* 第二个例子只配置了一个repo3,这个镜像只能匹配id是repo3的 ...

  7. Xamarin.Android 使用 Encoding.GetEncoding("GB2312") 报错解决方案

    问题描述:使用byte转换成汉字编码格式,debug模式下可以正常运行,但是release模式下就会出现死机问题. 排除过程:最开始不知道是编码格式转换错误,于是把相关代码块注释掉,然后进行relea ...

  8. Golang标准库——io-结构

    结构 LimitedReader 定义 限制从Reader中读取的字节数. type LimitedReader struct { R Reader // underlying reader N in ...

  9. LearnOpenGL学习笔记(一)——现有代码理解

    首先,给出这次学习的代码原网址.------>原作者的源代码 (黑体是源码,注释是写的.) 引用的库(预编译): #include <glad/glad.h> //控制编译时函数的具 ...

  10. idea中切换svn地址不起作用

    由于公司换地儿,svn地址也跟着变化. 期望用idea能修改svn的地址,不至于重新checkout.网上很多说修改 vcs -> Subversion -> Relocate .把原来的 ...