SSM实现简单后台分页
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实现简单后台分页的更多相关文章
- springMVC+spring+MyBatis(SSM)的简单配置
SSM(Spring+SpringMVC+MyBatis)框架集由Spring.SpringMVC.MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架. 其中: Spring是一 ...
- 基于IDEA采用springboot+Mybatis搭建ssm框架简单demo项目的搭建配置流程
一.通过对比可以原始SSM搭建流程,spring boot省去了大量的配置,极大提高了开发者的效率.原始SSM框架搭建流程见博客: https://www.cnblogs.com/No2-explor ...
- ssm整合简单例子
1.首先新建一个maven项目 2.在pom.xml文件中加入以下代码引入包 <properties> <project.build.sourceEncoding>UTF-8& ...
- ssm框架搭建(下) 简单案例
前言 这段时间没有更新博客,一直想做一个基于ssm的简单的项目.经过多次的尝试,终于实现了简单的增删查改功能了. 正文 由于前端的技术不是很熟悉,经过多方的查阅,使用了bootstrap的样式,来使界 ...
- (原创)ssm sql 例子(freemarker+jsp)
ssm整合地址:http://www.cnblogs.com/xiaohuihui96/p/6104351.html 接下讲解一个插入语句的流程和顺带讲解freemarker+jsp视图的整合 初次接 ...
- ssm+maven 框架整合
开篇简言:maven的存在让ssm框架简单了一个量级,BaseDao的存在又让项目简化了一个量级,希望看到这篇文章的都能深入的了解上面两项,好了,进入主题,构造一个ssm框架 1.准备工具 mave ...
- spring boot简单的小demo(适合于初学者)
import com.example.demo2.com.example.dao.ShopDao; import com.example.demo2.com.example.entity.Shops; ...
- Java基础-SSM之mybatis快速入门篇
Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...
- 一个ssm综合小案例-商品订单管理----写在前面
学习了这么久,一直都是零零散散的,没有把知识串联起来综合运用一番 比如拦截器,全局异常处理,json 交互,RESTful 等,这些常见技术必须要掌握 接下来呢,我就打算通过这么一个综合案例把这段时间 ...
随机推荐
- Cordova - 安装camera插件之后编译错误解决方法!
安装camera插件之后,编译出错,错误截图如下: 刚开始以为是AAPT编译导致的,尝试关闭AAPT编译选项,但是不行,认真看了一下编译出错信息,应该是缺少文件导致的,随后在对应的目录中加入了缺失的文 ...
- Matlab实现《追光者》简谱
MATLAB除了生孩子,其他全都能做系列. 使用MATLAB进行播放<追光者>,纯文本内容哦. Fs = ; load y; sound(y, Fs); 加载的y是哪里来的呢?当然是调用函 ...
- 手动封装on,emit,off
on 绑定 emit 触发 off 解绑 //存放事件eventList = {key:valhandle:[]} 1对多on(eventName,callback);handle:-------N多 ...
- 如何运用kali-xplico网络取证分析?点开看看吧
0x00前言: 本工具仅供安全技术学习和教育用途,禁止非法使用! 前方高能 建议物理机选作,虚拟机快照,万一你那个东西做错了,我还得背锅0x01介绍: Xplico网络数据取证工具 ...
- linux上面是否有安装redis,redis启动
1.进入/usr/local/src目录,下载redis # cd /usr/local/src# wget http://download.redis.io/releases/redis-4.0.6 ...
- Linux下用ifconfig命令设置IP、掩码、网关
设置IP和掩码ifconfig eth0 192.168.1.240 netmask 255.255.255.0设置网关route add default gw 192.168.1.1 每日一言:靡不 ...
- Python模块学习 - fabric
简介 fabric是一个Python的库,同时它也是一个命令行工具.使用fabric提供的命令行工具,可以很方便地执行应用部署和系统管理等操作. fabric依赖于paramiko进行ssh交互,fa ...
- 机器学习与Tensorflow(6)——LSTM的Tensorflow实现、Tensorboard简单实现、CNN应用
最近写的一些程序以及做的一个关于轴承故障诊断的程序 最近学习进度有些慢 而且马上假期 要去补习班 去赚下学期生活费 额.... 抓紧时间再多学习点 1.RNN递归神经网络Tensorflow实现程序 ...
- [视频]K8飞刀 mysql注入点拿shell & UDF提权教程
[视频]K8飞刀 mysql注入点拿shell & UDF提权教程 链接: https://pan.baidu.com/s/1a7u_uJNF6SReDbfVtAotIw 提取码: ka5m
- [视频]K8飞刀 WordPress XSS添加管理员 & GetShell 教程
[视频]K8飞刀 WordPress XSS添加管理员 & GetShell 教程 https://pan.baidu.com/s/1hq4LsmK