记一次 SSM 分页
1.实体层(entity,pojo,domain)
package com.entity;
import java.io.Serializable;
private int totalCount; //总记录数
private int totalPageCount; //总页数
private int startPos; //开始位置,从0开始
private boolean hasFrist; //是否有首页
private boolean hasPre; //是否有前一页
private boolean hasNext; //是否有后一页
private boolean hasLast; //是否有尾页
/**
* 通过构造函数,传入总记录数和当前页
* @param pageNow
* @param totalCount
*/
public CountPage(int pageNow, int totalCount) {
super();
this.pageNow = pageNow;
this.totalCount = totalCount;
}
//获取总页数
public int getTotalPageCount() {
totalPageCount=getTotalCount()/getPageSize();
return (totalCount/pageSize==1) ? totalPageCount:totalPageCount+1;
}
public void setTotalPageCount(int totalPageCount) {
this.totalPageCount = totalPageCount;
}
public int getPageNow() {
return pageNow;
}
public void setPageNow(int pageNow) {
this.pageNow = pageNow;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getTotalCount() {
return totalCount;
}
public void setTotalCount(int totalCount) {
this.totalCount = totalCount;
}
//取得选择记录的初始位置
public int getStartPos() {
return (pageNow-1)*pageSize;
}
public void setStartPos(int startPos) {
this.startPos = startPos;
}
//判断是否有第一页
public boolean isHasFrist() {
return (pageNow==1) ? false:true;
}
public void setHasFrist(boolean hasFrist) {
this.hasFrist = hasFrist;
}
//如果有首页就有前一页
public boolean isHasPre() {
return isHasFrist() ? true:false;
}
public void setHasPre(boolean hasPre) {
this.hasPre = hasPre;
}
//如果有尾页就有下一页
public boolean isHasNext() {
return isHasNext() ? true:false;
}
public void setHasNext(boolean hasNext) {
this.hasNext = hasNext;
}
//判断是否有尾页
public boolean isHasLast() {
return (pageNow==getTotalCount()) ? false:true;
}
public void setHasLast(boolean hasLast) {
this.hasLast = hasLast;
}
}
2.DAO层
package com.dao;
import java.util.List;
import com.entity.MyAccount;
public interface MyAccountMapper {
/* 查询所有 传值(当前页,每页显示多少条数据) */
List<MyAccount> findAll(Integer pageNow,Integer pageSize);
/* 查询总数 */
Integer myAccountCount();
}
3.xxxmapper.xml
<?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">
<mapper namespace="com.dao.MyAccountMapper" >
<!-- 查询所有 并用 limit 进行 分页 -->
<select id="findAll" resultType="com.entity.MyAccount">
select * from account limit #{0},#{1}
</select>
<!-- 查询总数 -->
<select id="accountCount" resultType="Integer">
select COUNT(*) from account
</select>
</mapper>
4.服务层(service)
package com.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import com.dao.MyAccountMapper;
import com.entity.MyAccount; @Transactional
@Service
public class AccountService { @Autowired
MyAccountMapper accountMapper = null; /**
* 查询 所有 账户
*/
public List<MyAccount> findAll(Integer pageNow,Integer pageSize){
System.out.println("业务查询 >>> 查询我的所有账户");
List<MyAccount> list = accountMapper.findAll(pageNow, pageSize);
System.out.println("查询到的结果是 >>> " + list.toString());
return list;
} /**
* 查询 总页数
*/
public Integer myAccountCount(){
System.out.println("业务查询 >>> 查询所有账户数量");
return accountMapper.myAccountCount();
}
}
5.控制层(Controller)
package com.web; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping; import com.entity.CountPage;
import com.entity.MyAccount;
import com.service.AccountService; @Controller
public class AccountController { @Resource
AccountService accountService = null; /**
* 查询所有账户
*/
@RequestMapping(value = "/account")
public String findAll(Model model,HttpServletRequest request){ //获取当前页数
String pageNow=request.getParameter("pageNow");
//获取总页数
int totalCount=(int)accountService.myAccountCount();
//初始化 CountPage 对象 page
CountPage page=null;
//new 一个 集合 把数据 放进集合里
List<MyAccount> list=new ArrayList<MyAccount>();
if (pageNow!=null) {
page=new CountPage(Integer.parseInt(pageNow), totalCount);
list=this.accountService.findAll(page.getStartPos(),page.getPageSize());
}else {
page=new CountPage(1, totalCount);
list=this.accountService.findAll(page.getStartPos(),page.getPageSize());
}
//把数据放到 model 中并转发到 jsp 页面
model.addAttribute("list", list);
model.addAttribute("page", page);
return "myaccount";
}
}
6.页面代码(JSP)
<div class="pager">
<font size="2">共 ${page.totalPageCount} 页</font> <font size="2">第
${page.pageNow} 页</font> <a href="account?pageNow=1">首页</a>
<c:choose>
<c:when test="${page.pageNow - 1 > 0}">
<a href="account?pageNow=${page.pageNow - 1}">上一页</a>
</c:when>
<c:when test="${page.pageNow - 1 <= 0}">
<a href="account?pageNow=1">上一页</a>
</c:when>
</c:choose>
<c:choose>
<c:when test="${page.totalPageCount==0}">
<a href="account?pageNow=${page.pageNow}">下一页</a>
</c:when>
<c:when test="${page.pageNow + 1 < page.totalPageCount}">
<a href="account?pageNow=${page.pageNow + 1}">下一页</a>
</c:when>
<c:when test="${page.pageNow + 1 >= page.totalPageCount}">
<a href="account?pageNow=${page.totalPageCount}">下一页</a>
</c:when>
</c:choose>
<c:choose>
<c:when test="${page.totalPageCount==0}">
<a href="account?pageNow=${page.pageNow}">尾页</a>
</c:when>
<c:otherwise>
<a href="account?pageNow=${page.totalPageCount}">尾页</a>
</c:otherwise>
</c:choose>
</div>
注:其中 <a href="account?pageNow=1">首页</a> ( account 是 控制层(Controller) @RequestMapping(value = "/account") 的值)
记一次 SSM 分页的更多相关文章
- 记一次SSM项目小结(一)
记一次SSM项目小结(一) ssm框架 环境配置 服务器配置 解决方法 拦截器重定向到localhost nginx和tomcat中session失效 mybatis的xml文件不生效 数据库用户创 ...
- 基于Mysql数据库的SSM分页查询
前言: Hello,本Y又来了,"分页"在我们使用软件的过程中是一个很常见的场景,比如博客园对于每个博主的博客都进行了分页展示.可以简单清晰的展示数据,防止一下子将过多的数据展现给 ...
- ssm分页
pom.xml配置文件中增加相关的插件. <dependency> <groupId>com.github.pagehelper</groupId> <art ...
- 记一次Layui分页
<link rel="stylesheet" href="/layui/css/layui.css"> <div class="ro ...
- mysq带条件的分页查询数据结果错误
记一次mysql分页条件查询的结果出错: 以一张用户表为例,首先我们看表中的所有数据,注意红色框住的部分: 我们使用不带条件的分页查询来查询,数据显示是OK的: SELECT id,login_nam ...
- SQLServer分页查询笔记
学习SqlServer到现在快两年了吧,分页查询总是忘了看笔记,看了又忘.之前用的分页都是row_number函数的方式,背不住...直到今天,看到别人写的另一种分页写法,看似比row_number简 ...
- 8.bash编辑命令行
8.编辑命令行本章介绍 GNU 命令行编辑界面的基本功能.命令行编辑是 Readline 库提供的:这个库被几个不同的程序共用,Bash 是其中一个.使用交互式的 shell 时,默认已经打开了命令行 ...
- 基于SSM的分页
现在基本每一个项目都有用到分页,SSM也是当前企业用到的比较频繁的框架,这里我就总结一下基于SSM的分页: 一.首先我们要准备一个分页的工具类 /** * 分页 */ public class Pag ...
- 基于SSM框架的简易的分页功能——包含maven项目的搭建
新人第一次发帖,有什么不对的地方请多多指教~~ 分页这个功能经常会被使用到,我之前学习的时候找了很多资源,可都看不懂(笨死算了),最后还是在朋友帮助下做出了这个分页.我现在把我所能想到的知识 做了一个 ...
随机推荐
- speech
1.李开复:一个人的成功,15%靠专业知识,其余15%人际沟通,公众演讲,以及影响他人的能力 2.演讲是一门遗憾的艺术 3.没有准备就等于准备失败 4.追求完美,就是在追求完蛋 5.宁可千日无机会,不 ...
- 性能测试监控工具nmon安装及使用方法
1.概述 监控,在检查系统问题或优化系统性能工作上是一个不可缺少的部分.通过操作系统监控工具监视操作系统资源的使用情况,间接地反映了各服务器程序的运行情况.根据运行结果分析可以帮助我们快速定位系统问题 ...
- 必会SQL练习题
()表名:购物信息 购物人 商品名称 数量 A 甲 B 乙 C 丙 A 丁 B 丙 …… 给出所有购入商品为两种或两种以上的购物人记录 答:); ()表名:成绩表 姓名 课程 分数 张三 语文 张三 ...
- ios中关键词weak,assign,copy.strong等的区别
虽然开发IOS好多年了.但是这几个关键词总是深深困扰着我.加上IOS开发从mRC到ARC的过渡,这些概念更为困扰我了. 先说weak与assign.weak只能修饰对象,不能修饰基本数据类型.而ass ...
- day3——两数之和
// 小白一名,0算法基础,艰难尝试算法题中,若您发现本文中错误, 或有其他见解,往不吝赐教,感激不尽,拜谢. 领扣 第2题 今日算法 题干 //给定一个整数数组和一个目标值,找出数组中和为目标值的两 ...
- java动态代理实现与原理详细分析(代码层面解释了AOP的实现)
关于Java中的动态代理,我们首先需要了解的是一种常用的设计模式--代理模式,而对于代理,根据创建代理类的时间点,又可以分为静态代理和动态代理. 一.代理模式 代理模式是常用的java设计模式, ...
- 3 - Two Pointers Algorithm
5. Kth Largest Element (quick sort的变种) https://www.lintcode.com/problem/kth-largest-element/descript ...
- Cache Line
转载: https://yq.aliyun.com/articles/46550
- 在Mac os 10.11 下编译Berkeley caffe
安装各种补丁和组件,缺啥装啥. python 采用 2.7.13 最新版. 安装工具 homebrew , pip 很繁琐,但是没难度. 由于本人macbook pro不支持CUDA,所以不用安装. ...
- ssh跳过knownhost文件
在平时工作中,有时候需要SSH登陆到别的Linux主机上去,但有时候SSH登陆会被禁止,并弹出如下类似提示: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ...