实现分页  这里提供两种方式  一种是传统的分页方式  一种是基于pageHelper插件 实现的分类     推荐使用后者

前者是一般开发的方式   思路  先手动创建一个 pageUtil 工具 用于记录 分页的各种信息  然后使用繁琐的方式去调用数据

pageUtil  类  可以根据需要自定义

  1. package com.imooc.project.util;
  2. /**
  3. * 这里使用 传统的 方法 进行 分页 设计 需要建立一个 用于分页的信息类 用来存放分页的信息
  4. * @author lqf
  5. *
  6. */
  7.  
  8. import java.util.List;
  9.  
  10. public class PageUtil {
  11. private int currentPageNum; //当前要看那一页
  12.  
  13. private int pageSize=10 ; //每页显示的条数
  14.  
  15. private int totalSize; //总记录条数
  16.  
  17. private int startIndex; //查询开始记录的索引 limit ? ? limit的使用
  18.  
  19. private int totalPageNum; //总页数
  20.  
  21. private int nextPageNum; //下一页
  22.  
  23. private int prePageNum; //上一页
  24.  
  25. private List records; //当前页的 记录集 List<User> records 返回的是 每一页中user的 集合
  26.  
  27. //用于显示 页面上的 导航的 页数 用户可以自定义
  28. private int startPageNum; // 起始页
  29. private int endPageNum ; // 结束页
  30. private String url ;
  31. //使用构造方法。 传递 必要的 俩个参数 第一个是 页码 第二个是总记录条数 就可以获得 其他所有的数据
  32.  
  33. public PageUtil(int currentPageNum,int totalrecords)
  34. {
  35. this.currentPageNum=currentPageNum;
  36. this.totalSize= totalrecords ;
  37. /*
  38. * 1 0 - 10 limit(0,10)
  39. * 2 10 - 20 limit(10,10)
  40. * 3 20 -30 limit(20,30)
  41. * (当前页-1 )*10 = 该页索引值 startIndex
  42. * (currentPageNum-1)*pageSize
  43. */
  44.  
  45. //计算开始记录的索引
  46. startIndex=(currentPageNum-1)*pageSize;
  47. //计算总页数
  48. totalPageNum=totalSize%pageSize==0?totalSize/pageSize:totalSize/pageSize+1;
  49. //计算开始和结束页号 这个根据自身可设计 1 2..9
  50. if(totalPageNum>9)
  51. {
  52. startPageNum=currentPageNum-4;
  53. endPageNum=currentPageNum+4;
  54.  
  55. if(startPageNum<1)
  56. {
  57. startPageNum=1;
  58. endPageNum=startPageNum+8;
  59. }
  60. if(endPageNum>totalPageNum)
  61. {
  62. endPageNum=totalPageNum;
  63. startPageNum=endPageNum-8;
  64. }
  65. }
  66. else
  67. {
  68. startPageNum=1;
  69. endPageNum=totalPageNum;
  70.  
  71. }
  72. }
  73.  
  74. public int getStartPageNum() {
  75. return startPageNum;
  76. }
  77.  
  78. public void setStartPageNum(int startPageNum) {
  79. this.startPageNum = startPageNum;
  80. }
  81.  
  82. public int getEndPageNum() {
  83. return endPageNum;
  84. }
  85.  
  86. public void setEndPageNum(int endPageNum) {
  87. this.endPageNum = endPageNum;
  88. }
  89.  
  90. //上一页
  91. public int getPrePageNum() {
  92. prePageNum=currentPageNum-1;
  93.  
  94. if(prePageNum<=0)
  95. {
  96. prePageNum=1;
  97. }
  98. return prePageNum;
  99. }
  100. // 下一页
  101. public int getNextPageNum() {
  102.  
  103. nextPageNum=currentPageNum+1;
  104.  
  105. if(nextPageNum>totalPageNum)
  106. {
  107. nextPageNum=totalPageNum;
  108. }
  109. return nextPageNum;
  110. }
  111.  
  112. public int getCurrentPageNum() {
  113. return currentPageNum;
  114. }
  115.  
  116. public void setCurrentPageNum(int currentPageNum) {
  117. this.currentPageNum = currentPageNum;
  118. }
  119.  
  120. public int getPageSize() {
  121. return pageSize;
  122. }
  123.  
  124. public void setPageSize(int pageSize) {
  125. this.pageSize = pageSize;
  126. }
  127.  
  128. public int getTotalSize() {
  129. return totalSize;
  130. }
  131.  
  132. public void setTotalSize(int totalSize) {
  133. this.totalSize = totalSize;
  134. }
  135.  
  136. public int getStartIndex() {
  137. return startIndex;
  138. }
  139.  
  140. public void setStartIndex(int startIndex) {
  141. this.startIndex = startIndex;
  142. }
  143.  
  144. public int getTotalPageNum() {
  145. return totalPageNum;
  146. }
  147.  
  148. public void setTotalPageNum(int totalPageNum) {
  149. this.totalPageNum = totalPageNum;
  150. }
  151.  
  152. public List getRecords() {
  153. return records;
  154. }
  155.  
  156. public void setRecords(List records) {
  157. this.records = records;
  158. }
  159.  
  160. public void setPrePageNum(int prePageNum) {
  161. this.prePageNum = prePageNum;
  162. }
  163.  
  164. public void setNextPageNum(int nextPageNum) {
  165. this.nextPageNum = nextPageNum;
  166. }
  167.  
  168. public String getUrl() {
  169. return url;
  170. }
  171.  
  172. public void setUrl(String url) {
  173. this.url = url;
  174. }
  175.  
  176. }

web层  简写

  1. //获得当前页
  2. String num = req.getParameter("num");
  3. if(num==null)
  4. {
  5. num="1";
  6. }
  7. //调用pageUtil工具
  8. PageUtil page= null ;
  9. try {
  10. page=service.getAllUsers(num);
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. //将数据 传入 域中 并转发到users.jsp 页面中
  15. req.setAttribute("page", page);
  16. req.getRequestDispatcher("/users.jsp").forward(req, resp);

service层

  1. userDao userDao= new userDao() ;
  2.  
  3. public static SqlSessionFactory sqlSessionFactory = null;
  4. //获得 工具类的信息
  5. public PageUtil getAllUsers(String num) throws Exception{
  6. //当前页
  7. int currentPageNum=1 ;
  8. // trim() 消除首尾的空格
  9. if (num != null ) {
  10. currentPageNum = Integer.parseInt(num);
  11. System.out.println(currentPageNum);
  12. }
  13. int totalRecords =userDao.totalRecords();
  14.  
  15. PageUtil pg = new PageUtil(currentPageNum, totalRecords);
  16.  
  17. List<User> users = userDao.getAllUsers(pg.getStartIndex(), pg.getPageSize());
  18.  
  19. pg.setRecords(users);
  20.  
  21. return pg;
  22.  
  23. }

dao

  1. public class userDao extends BaseDao {
  2.  
  3. //获得所有的信息个数
  4. public int totalRecords() throws Exception{
  5.  
  6. // 使用 jdbc 模板 作为数据的连接层
  7. int result = 0;
  8. Connection conn = this.getConnection();
  9. PreparedStatement ps = null;
  10. ResultSet rs = null;
  11. // count(*) 返回找到的行数 count(列名) 返回一个列的数据项数 count(*) count 设置别名为 count
  12. String sql = "select count(*) count from person";
  13. ps = conn.prepareStatement(sql);
  14. rs = ps.executeQuery();
  15.  
  16. if (rs.next()) {
  17. result = rs.getInt("count");
  18. }
  19.  
  20. return result;
  21. }
  22. //获得 对应页的信息
  23. public List<User> getAllUsers(int startIndex, int pageSize) throws Exception{
  24. //使用 数组获得数据 调用DBCP模板
  25. QueryRunner queryRunner= new QueryRunner();
  26. String sql= "select * from person limit ?,?";
  27. List<User> users= null ;
  28. //获得数据
  29. users=queryRunner.query(this.getConnection(), sql,new BeanListHandler<User>(User.class),new Object[]{startIndex,pageSize});
  30. return users;
  31. }
  32.  
  33. }

*************************************************

使用 mybatis  pageHelper 插件 来开发

pageHelper 插件的 使用教程

这是pageHelper 的 开发者  在 GitHub 上的 使用教程

https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md

mybatis的配置信息   插入    pagehelper  插件

  1. <!-- 在mybatis的配置文件下 配置 pagehelper 插件 先后顺序不要错 否则会报错的 -->
  2. <plugins>
  3. <plugin interceptor="com.github.pagehelper.PageInterceptor">
  4. <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
  5. <property name="helperDialect" value="mysql"/>
  6. </plugin>
  7.  
  8. </plugins>

mapper.xml

web层

pageHelper 插件 要比 传统的 简单的 很多   毕竟是插件嘛      它是对mybatis的四大对象    parameterHandler   resultSetHandler  statementHandler  executor   进行控制  通过反射  动态代理 实现 功能的增强    类似于 过滤器的功能

不过  值得注意的是  插件 的使用 会修改底层的设计  所以 还是尽量少用插件把

传统方式和插件方式 分别实现 分页 功能 pageHelper 插件的更多相关文章

  1. SpringBoot集成Mybatis并具有分页功能PageHelper

    SpringBoot集成Mybatis并具有分页功能PageHelper   环境:IDEA编译工具   第一步:生成测试的数据库表和数据   SET FOREIGN_KEY_CHECKS=0;   ...

  2. 利用Bootstrap Paginator插件和KnockoutJS完成分页功能

    在最近一个项目中,需要结合一堆条件查询并对查询的结果数据完成一个简单分页功能,可是做着做着,自己的思路越来越模糊,做到心态崩溃!!! 哈哈,特此花点时间重新总结,并从最简单的分页,然后向多条件查询分页 ...

  3. spring和mybatis集成,自动生成model、mapper,增加mybatis分页功能

    软件简介 Spring是一个流行的控制反转(IoC)和面向切面(AOP)的容器框架,在java webapp开发中使用广泛.http://projects.spring.io/spring-frame ...

  4. C#不用union,而是有更好的方式实现 .net自定义错误页面实现 .net自定义错误页面实现升级篇 .net捕捉全局未处理异常的3种方式 一款很不错的FLASH时种插件 关于c#中委托使用小结 WEB网站常见受攻击方式及解决办法 判断URL是否存在 提升高并发量服务器性能解决思路

    C#不用union,而是有更好的方式实现   用过C/C++的人都知道有个union,特别好用,似乎char数组到short,int,float等的转换无所不能,也确实是能,并且用起来十分方便.那C# ...

  5. Maven插件方式使用Mybatis Generator

    Mybatis Generator Mybatis Generator简称MBG,可以根据数据库自动生成实体类.单表查询接口及其映射xml文件(也可以选择以注解方式生成). 下面介绍一下以maven插 ...

  6. 如何实现Windows Phone代码与Unity相互通信(插件方式)

    原地址:http://www.cnblogs.com/petto/p/3915943.html 一些废话 原文地址: http://imwper.com/unity/petto/%E5%A6%82%E ...

  7. Eclipse扩展安装插件方式

    Eclipse安装插件经常使用的是直接安装的方式,就是将插件中包含的plugins和features文件夹中的内容直接复制到了Eclipse的plugins和features文件夹内,这样很容易导致插 ...

  8. GDAL使用插件方式编译HDF4、HDF5以及NetCDF的bug修改

    GDAL库中提供了很方便的插件机制来扩展支持的数据格式,比如HDF4.HDF5.NetCDF.FileGDB.Postgre.Oralce等等.都可以通过插件的方式来使得GDAL支持相应的格式.最近将 ...

  9. Django【设计】可插拔的插件方式实现

    需求: 在CMDB系统中,我们需要对资产进行采集和资产入库,包括serverBasic.disk.memory.nic信息等,客户端需要采集这些硬件的信息,服务端则负责资产入库,但是需要采集的硬件并不 ...

随机推荐

  1. HDU 1584(蜘蛛牌 DFS)

    题意是在蜘蛛纸牌的背景下求 10 个数的最小移动距离. 在数组中存储 10 个数字各自的位置,用深搜回溯的方法求解. 代码如下: #include <bits/stdc++.h> usin ...

  2. java树形菜单实现

    java树形菜单实现 公司表: 部门表: 实体类: public class Node { private Integer companyId;//公司id private String compan ...

  3. Spark SQL相关总结

    1.spark 数据透视图: pivot(pivot_col, values=None) Pivots a column of the current [[DataFrame]] and perfor ...

  4. Python DB operation

    mysql http://www.cnblogs.com/zhangzhu/archive/2013/07/04/3172486.html 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目 ...

  5. 消除导入MNIST数据集发出的警告信息

    原本导入数据集你仅需这样: # Import MNIST data from tensorflow.examples.tutorials.mnist import input_data mnist = ...

  6. Python3:递归实现输出目录下所有的文件

    今天来整理一下os库中方法的使用,如何输出一个目录下的所有文件? 1.首先介绍几个基本的的方法: 1)os.getcwd()  #返回当前工作目录 2)os.listdir()    #返回一个列表, ...

  7. 忘记mysql的登陆密码该怎么办?

    1.如果忘记了其他用户的密码,可以使用root账户进入mysql,修改mysql.user表中的用户密码 2.如果忘记了root的mysql密码,可以使用如下方式: 确认服务器处于安全的状态,也就是没 ...

  8. Visual Studio Code 的使用方法和技巧

    VSCode是微软推出的一款轻量编辑器,采取了和VS相同的UI界面,搭配合适的插件可以优化前端开发的体验. 布局:左侧是用于展示所要编辑的所有文件和文件夹的文件管理器,依次是`资源管理器`,`搜索`, ...

  9. 如何开启远程debug调试功能?

    远程debug步骤: 1.vi /usr/local/sa/tomcat-ui/bin/catalina.sh 最顶上加export JPDA_ADDRESS=12345 2.vi /usr/loca ...

  10. Linux 首先基本包安装(vim啊什么的),源,源优化,项目架构介绍, (LNMuWsgi)Django项目相关软件mysql,redies,python(相关模块)安装配置测试

    内容 补充: 查看已启动服务的端口 netstat -tulnp |grep (方式1) ss -tulnp|grep (方式2) 前期铺垫: . Linux要能上网 . 掌握Linux软件包安装方法 ...