传统方式和插件方式 分别实现 分页 功能 pageHelper 插件
实现分页 这里提供两种方式 一种是传统的分页方式 一种是基于pageHelper插件 实现的分类 推荐使用后者
前者是一般开发的方式 思路 先手动创建一个 pageUtil 工具 用于记录 分页的各种信息 然后使用繁琐的方式去调用数据
pageUtil 类 可以根据需要自定义
package com.imooc.project.util;
/**
* 这里使用 传统的 方法 进行 分页 设计 需要建立一个 用于分页的信息类 用来存放分页的信息
* @author lqf
*
*/ import java.util.List; public class PageUtil {
private int currentPageNum; //当前要看那一页 private int pageSize=10 ; //每页显示的条数 private int totalSize; //总记录条数 private int startIndex; //查询开始记录的索引 limit ? ? limit的使用 private int totalPageNum; //总页数 private int nextPageNum; //下一页 private int prePageNum; //上一页 private List records; //当前页的 记录集 List<User> records 返回的是 每一页中user的 集合 //用于显示 页面上的 导航的 页数 用户可以自定义
private int startPageNum; // 起始页
private int endPageNum ; // 结束页
private String url ;
//使用构造方法。 传递 必要的 俩个参数 第一个是 页码 第二个是总记录条数 就可以获得 其他所有的数据 public PageUtil(int currentPageNum,int totalrecords)
{
this.currentPageNum=currentPageNum;
this.totalSize= totalrecords ;
/*
* 1 0 - 10 limit(0,10)
* 2 10 - 20 limit(10,10)
* 3 20 -30 limit(20,30)
* (当前页-1 )*10 = 该页索引值 startIndex
* (currentPageNum-1)*pageSize
*/ //计算开始记录的索引
startIndex=(currentPageNum-1)*pageSize;
//计算总页数
totalPageNum=totalSize%pageSize==0?totalSize/pageSize:totalSize/pageSize+1;
//计算开始和结束页号 这个根据自身可设计 1 2..9
if(totalPageNum>9)
{
startPageNum=currentPageNum-4;
endPageNum=currentPageNum+4; if(startPageNum<1)
{
startPageNum=1;
endPageNum=startPageNum+8;
}
if(endPageNum>totalPageNum)
{
endPageNum=totalPageNum;
startPageNum=endPageNum-8;
}
}
else
{
startPageNum=1;
endPageNum=totalPageNum; }
} public int getStartPageNum() {
return startPageNum;
} public void setStartPageNum(int startPageNum) {
this.startPageNum = startPageNum;
} public int getEndPageNum() {
return endPageNum;
} public void setEndPageNum(int endPageNum) {
this.endPageNum = endPageNum;
} //上一页
public int getPrePageNum() {
prePageNum=currentPageNum-1; if(prePageNum<=0)
{
prePageNum=1;
}
return prePageNum;
}
// 下一页
public int getNextPageNum() { nextPageNum=currentPageNum+1; if(nextPageNum>totalPageNum)
{
nextPageNum=totalPageNum;
}
return nextPageNum;
} public int getCurrentPageNum() {
return currentPageNum;
} public void setCurrentPageNum(int currentPageNum) {
this.currentPageNum = currentPageNum;
} public int getPageSize() {
return pageSize;
} public void setPageSize(int pageSize) {
this.pageSize = pageSize;
} public int getTotalSize() {
return totalSize;
} public void setTotalSize(int totalSize) {
this.totalSize = totalSize;
} public int getStartIndex() {
return startIndex;
} public void setStartIndex(int startIndex) {
this.startIndex = startIndex;
} public int getTotalPageNum() {
return totalPageNum;
} public void setTotalPageNum(int totalPageNum) {
this.totalPageNum = totalPageNum;
} public List getRecords() {
return records;
} public void setRecords(List records) {
this.records = records;
} public void setPrePageNum(int prePageNum) {
this.prePageNum = prePageNum;
} public void setNextPageNum(int nextPageNum) {
this.nextPageNum = nextPageNum;
} public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} }
web层 简写
//获得当前页
String num = req.getParameter("num");
if(num==null)
{
num="1";
}
//调用pageUtil工具
PageUtil page= null ;
try {
page=service.getAllUsers(num);
} catch (Exception e) {
e.printStackTrace();
}
//将数据 传入 域中 并转发到users.jsp 页面中
req.setAttribute("page", page);
req.getRequestDispatcher("/users.jsp").forward(req, resp);
service层
userDao userDao= new userDao() ;
public static SqlSessionFactory sqlSessionFactory = null;
//获得 工具类的信息
public PageUtil getAllUsers(String num) throws Exception{
//当前页
int currentPageNum=1 ;
// trim() 消除首尾的空格
if (num != null ) {
currentPageNum = Integer.parseInt(num);
System.out.println(currentPageNum);
}
int totalRecords =userDao.totalRecords();
PageUtil pg = new PageUtil(currentPageNum, totalRecords);
List<User> users = userDao.getAllUsers(pg.getStartIndex(), pg.getPageSize());
pg.setRecords(users);
return pg;
}
dao
public class userDao extends BaseDao {
//获得所有的信息个数
public int totalRecords() throws Exception{
// 使用 jdbc 模板 作为数据的连接层
int result = 0;
Connection conn = this.getConnection();
PreparedStatement ps = null;
ResultSet rs = null;
// count(*) 返回找到的行数 count(列名) 返回一个列的数据项数 count(*) count 设置别名为 count
String sql = "select count(*) count from person";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
if (rs.next()) {
result = rs.getInt("count");
}
return result;
}
//获得 对应页的信息
public List<User> getAllUsers(int startIndex, int pageSize) throws Exception{
//使用 数组获得数据 调用DBCP模板
QueryRunner queryRunner= new QueryRunner();
String sql= "select * from person limit ?,?";
List<User> users= null ;
//获得数据
users=queryRunner.query(this.getConnection(), sql,new BeanListHandler<User>(User.class),new Object[]{startIndex,pageSize});
return users;
}
}
*************************************************
使用 mybatis pageHelper 插件 来开发
pageHelper 插件的 使用教程
这是pageHelper 的 开发者 在 GitHub 上的 使用教程
https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
mybatis的配置信息 插入 pagehelper 插件
<!-- 在mybatis的配置文件下 配置 pagehelper 插件 先后顺序不要错 否则会报错的 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<property name="helperDialect" value="mysql"/>
</plugin>
</plugins>
mapper.xml


web层

pageHelper 插件 要比 传统的 简单的 很多 毕竟是插件嘛 它是对mybatis的四大对象 parameterHandler resultSetHandler statementHandler executor 进行控制 通过反射 动态代理 实现 功能的增强 类似于 过滤器的功能
不过 值得注意的是 插件 的使用 会修改底层的设计 所以 还是尽量少用插件把
传统方式和插件方式 分别实现 分页 功能 pageHelper 插件的更多相关文章
- SpringBoot集成Mybatis并具有分页功能PageHelper
SpringBoot集成Mybatis并具有分页功能PageHelper 环境:IDEA编译工具 第一步:生成测试的数据库表和数据 SET FOREIGN_KEY_CHECKS=0; ...
- 利用Bootstrap Paginator插件和KnockoutJS完成分页功能
在最近一个项目中,需要结合一堆条件查询并对查询的结果数据完成一个简单分页功能,可是做着做着,自己的思路越来越模糊,做到心态崩溃!!! 哈哈,特此花点时间重新总结,并从最简单的分页,然后向多条件查询分页 ...
- spring和mybatis集成,自动生成model、mapper,增加mybatis分页功能
软件简介 Spring是一个流行的控制反转(IoC)和面向切面(AOP)的容器框架,在java webapp开发中使用广泛.http://projects.spring.io/spring-frame ...
- C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路
C#不用union,而是有更好的方式实现 用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...
- Maven插件方式使用Mybatis Generator
Mybatis Generator Mybatis Generator简称MBG,可以根据数据库自动生成实体类.单表查询接口及其映射xml文件(也可以选择以注解方式生成). 下面介绍一下以maven插 ...
- 如何实现Windows Phone代码与Unity相互通信(插件方式)
原地址:http://www.cnblogs.com/petto/p/3915943.html 一些废话 原文地址: http://imwper.com/unity/petto/%E5%A6%82%E ...
- Eclipse扩展安装插件方式
Eclipse安装插件经常使用的是直接安装的方式,就是将插件中包含的plugins和features文件夹中的内容直接复制到了Eclipse的plugins和features文件夹内,这样很容易导致插 ...
- GDAL使用插件方式编译HDF4、HDF5以及NetCDF的bug修改
GDAL库中提供了很方便的插件机制来扩展支持的数据格式,比如HDF4.HDF5.NetCDF.FileGDB.Postgre.Oralce等等.都可以通过插件的方式来使得GDAL支持相应的格式.最近将 ...
- Django【设计】可插拔的插件方式实现
需求: 在CMDB系统中,我们需要对资产进行采集和资产入库,包括serverBasic.disk.memory.nic信息等,客户端需要采集这些硬件的信息,服务端则负责资产入库,但是需要采集的硬件并不 ...
随机推荐
- 使用InternalsVisibleTo给assembly添加“友元assembly”
C#的internal关键字可以使标记的方法,字段或者属性等等只能在当前assembly内部使用,那么如果其他的assembly需要使用这个internal的方法的时候怎么办呢?.NET提供了一种类似 ...
- MyEclipse 2015 Stable 2.0破解方法
本篇博文简单介绍一下利用网上说明的方法破解MyEclipse 2015 Stable 2.0的具体细节.因为原来在贴吧上的方法不够详细,所以本人重新整理了一下.方法源自:http://tieba.ba ...
- mask rcnn
Mask RCNN Mask RCNN 中主要改进是在faster rcnn中box regression 的branch 上加入mask prediction branch,能够得到点到点的预测. ...
- .net使用Aspose.Words进行Word替换操作的实现代码
DLL文件下载 示例: Aspose.Words.Document doc = new Aspose.Words.Document(TempFile); Aspose.Words.DocumentBu ...
- L1-Day2
L1-Day21.明智的人从来不生气. [我的翻译]A wise man is never angry. [标准答案]A wise man never gets angry. [对比分析]be和get ...
- 330 div+css Experience
今天学习的div,感觉对编辑html更为方便快捷,但还是需要多练,多熟悉一下思路和逻辑方式 越来越感觉,代码不是重要的,重要的是方向和思路,am的float clearfloat 及属性,还有over ...
- Beta冲刺(2/7)
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(2/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 做了点商家数据表格 接下来的计划 做 ...
- Vue CLI 3+tinymce 5富文本编辑器整合
基于Vue CLI 3脚手架搭建的项目整合tinymce 5富文本编辑器,vue cli 2版本及tinymce 4版本参考:https://blog.csdn.net/liub37/article/ ...
- python3 解析 base64 数据
在阅读 glTF-Tutorial 教程时遇到了解析 base64 数据的问题. 原始 base64 数据为AAABAAIAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAAAAAAA ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(1)-13基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级
1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...