现在基本每一个项目都有用到分页,SSM也是当前企业用到的比较频繁的框架,这里我就总结一下基于SSM的分页:

一、首先我们要准备一个分页的工具类

  1. /**
  2. * 分页
  3. */
  4. public class Page implements Serializable {
  5. private static final long serialVersionUID = -3198048449643774660L;
  6. private int pageNow = 1; // 当前页数
  7. private int pageSize = 4; // 每页显示记录的条数
  8. private int totalCount; // 总的记录条数
  9. private int totalPageCount; // 总的页数
  10. @SuppressWarnings("unused")
  11. private int startPos; // 开始位置,从0开始
  12. @SuppressWarnings("unused")
  13. private boolean hasFirst;// 是否有首页
  14. @SuppressWarnings("unused")
  15. private boolean hasPre;// 是否有前一页
  16. @SuppressWarnings("unused")
  17. private boolean hasNext;// 是否有下一页
  18. @SuppressWarnings("unused")
  19. private boolean hasLast;// 是否有最后一页
  20. /**
  21. * 通过构造函数 传入  总记录数  和  当前页
  22. * @param totalCount
  23. * @param pageNow
  24. */
  25. public Page(int totalCount, int pageNow) {
  26. this.totalCount = totalCount;
  27. this.pageNow = pageNow;
  28. }
  29. /**
  30. * 取得总页数,总页数=总记录数/总页数
  31. * @return
  32. */
  33. public int getTotalPageCount() {
  34. totalPageCount = getTotalCount() / getPageSize();
  35. return (totalCount % pageSize == 0) ? totalPageCount
  36. : totalPageCount + 1;
  37. }
  38. public void setTotalPageCount(int totalPageCount) {
  39. this.totalPageCount = totalPageCount;
  40. }
  41. public int getPageNow() {
  42. return pageNow;
  43. }
  44. public void setPageNow(int pageNow) {
  45. this.pageNow = pageNow;
  46. }
  47. public int getPageSize() {
  48. return pageSize;
  49. }
  50. public void setPageSize(int pageSize) {
  51. this.pageSize = pageSize;
  52. }
  53. public int getTotalCount() {
  54. return totalCount;
  55. }
  56. public void setTotalCount(int totalCount) {
  57. this.totalCount = totalCount;
  58. }
  59. /**
  60. * 取得选择记录的初始位置
  61. * @return
  62. */
  63. public int getStartPos() {
  64. return (pageNow - 1) * pageSize;
  65. }
  66. public void setStartPos(int startPos) {
  67. this.startPos = startPos;
  68. }
  69. /**
  70. * 是否是第一页
  71. * @return
  72. */
  73. public boolean isHasFirst() {
  74. return (pageNow == 1) ? false : true;
  75. }
  76. public void setHasFirst(boolean hasFirst) {
  77. this.hasFirst = hasFirst;
  78. }
  79. /**
  80. * 是否有首页
  81. * @return
  82. */
  83. public boolean isHasPre() {
  84. // 如果有首页就有前一页,因为有首页就不是第一页
  85. return isHasFirst() ? true : false;
  86. }
  87. public void setHasPre(boolean hasPre) {
  88. this.hasPre = hasPre;
  89. }
  90. /**
  91. * 是否有下一页
  92. * @return
  93. */
  94. public boolean isHasNext() {
  95. // 如果有尾页就有下一页,因为有尾页表明不是最后一页
  96. return isHasLast() ? true : false;
  97. }
  98. public void setHasNext(boolean hasNext) {
  99. this.hasNext = hasNext;
  100. }
  101. /**
  102. * 是否有尾页
  103. * @return
  104. */
  105. public boolean isHasLast() {
  106. // 如果不是最后一页就有尾页
  107. return (pageNow == getTotalCount()) ? false : true;
  108. }
  109. public void setHasLast(boolean hasLast) {
  110. this.hasLast = hasLast;
  111. }
  112. }

二、编写mapper.xml的SQL语句

    1. <!-- 分页SQL语句 -->
    2. <select id="selectProductsByPage" resultMap="返回值类型">
    3. select
    4. *
    5. from 表名 WHERE user_id = #{userId,jdbcType=INTEGER} limit #{startPos},#{pageSize}
    6. </select>
    7. <!-- 取得记录的总数 -->
    8. <select id="getProductsCount" resultType="long">
    9. SELECT COUNT(*) FROM 表名 WHERE user_id = #{userId,jdbcType=INTEGER}
    10. </select>

三、DAO层编写对应的方法

    1. **
    2. * 使用注解方式传入多个参数,用户产品分页,通过登录用户ID查询
    3. * @param page
    4. * @param userId
    5. * @return startPos},#{pageSize}
    6. */
    7. public List<Products> selectProductsByPage(@Param(value="startPos") Integer startPos,@Param(value="pageSize") Integer pageSize,@Param(value="userId") Integer userId);
    8. /**
    9. * 取得产品数量信息,通过登录用户ID查询
    10. * @param userId
    11. * @return
    12. */
    13. public long getProductsCount(@Param(value="userId") Integer userId);

四、service接口

    1. /**
    2. * 分页显示商品
    3. * @param request
    4. * @param model
    5. * @param loginUserId
    6. */
    7. void showProductsByPage(HttpServletRequest request,Model model,int loginUserId);

五、service实现类

  1. @Override
  2. public void showProductsByPage(HttpServletRequest request, Model model,int loginUserId) {
  3. String pageNow = request.getParameter("pageNow");
  4. Page page = null;
  5. List<ProductWithBLOBs> products = new ArrayList<ProductWithBLOBs>();
  6. int totalCount = (int) productDao.getProductsCount(loginUserId);
  7. if (pageNow != null) {
  8. page = new Page(totalCount, Integer.parseInt(pageNow));
  9. allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId);
  10. } else {
  11. page = new Page(totalCount, 1);
  12. allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId);
  13. }
  14. model.addAttribute("products", products);
  15. model.addAttribute("page", page);
  16. }

六、controller层

  1. /**
  2. * 初始化 “我的产品”列表 JSP页面,具有分页功能
  3. *
  4. * @param request
  5. * @param model
  6. * @return
  7. */
  8. @RequestMapping(value = "映射路径", method = RequestMethod.GET)
  9. public String showMyProduct(HttpServletRequest request, Model model) {
  10. // 取得SESSION中的loginUser
  11. User loginUser = (User) request.getSession().getAttribute("loginUser");
  12. // 判断SESSION是否失效
  13. if (loginUser == null || "".equals(loginUser)) {
  14. return "redirect:/";
  15. }
  16. int loginUserId = loginUser.getUserId();
  17. //此处的productService是注入的IProductService接口的对象
  18. this.productService.showProductsByPage(request, model, loginUserId);
  19. return "跳转到的JSP路径";
  20. }

基于SSM的分页的更多相关文章

  1. Java基于ssm框架的restful应用开发

    Java基于ssm框架的restful应用开发 好几年都没写过java的应用了,这里记录下使用java ssm框架.jwt如何进行rest应用开发,文中会涉及到全局异常拦截处理.jwt校验.token ...

  2. 基于SSM的健身房管理系统

    基于SSM的健身房管理系统 The project was made in 2020-05-05~2020-05-10 谨以此片博文记录下我的第一个Java小Demo 项目展示 用户登录页 用户注册页 ...

  3. 基于SSM的租赁管理系统0.1_20161225_项目需求

    基于SSM的汽车租赁系统项目计划书 1.产品定位 本系统供提供租赁服务的企业内部使用,供企业员工进行线下操作. 2.需求分析 2.1 能为工作人员提供员工信息的管理功能,具有RBAC基于角色的权限管理 ...

  4. 基于Angularjs实现分页

    前言 学习任何一门语言前肯定是有业务需求来驱动你去学习它,当然ng也不例外,在学习ng前我第一个想做的demo就是基于ng实现分页,除去基本的计算思路外就是使用指令封装成一个插件,在需要分页的列表页面 ...

  5. 基于SSM实现的简易员工管理系统

    之前自学完了JAVA基础,一直以来也没有做什么好玩的项目,最近暑假,时间上比较空闲,所以又学习了一下最近在企业实际应用中比较流行的SSM框架,以此为基础,通过网络课程,学习编写了一个基于SSM实现的M ...

  6. 基于SSM之Mybatis接口实现增删改查(CRUD)功能

    国庆已过,要安心的学习了. SSM框架以前做过基本的了解,相比于ssh它更为优秀. 现基于JAVA应用程序用Mybatis接口简单的实现CRUD功能: 基本结构: (PS:其实这个就是用的Mapper ...

  7. 基于ArcGISServer进行分页矢量查询的方案进阶

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.    背景 在空间查询中,我们对查询结果要求以分页形式进行展示.G ...

  8. 基于SSM的Java Web应用开发原理初探

    SSM开发Web的框架已经很成熟了,成熟得以至于有点落后了.虽然如今是SOA架构大行其道,微服务铺天盖地的时代,不过因为仍有大量的企业开发依赖于SSM,本文简单对基于SSM的Java开发做一快速入门, ...

  9. 基于SSM框架配置多数据源

    项目基于ssm + maven,通过注解可以实现自动切换数据源. 一.pom.xml <?xml version="1.0" encoding="UTF-8&quo ...

随机推荐

  1. HDU-1203(01背包)

    I NEED A OFFER! Problem Description Speakless 很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的 ...

  2. Javascript for循环指定锚点跳转

    在某些使用多层嵌套for循环的场合里 会用到break和continue来中途跳转循环 break是跳出整个循环 continue是跳出当前循环,继续下次循环 而多层for循环嵌套里使用这两个关键字默 ...

  3. 集合知识点一 Collection(List)

  4. iOS 模仿一个小项目,总结一下里边的模块

      ManoBoo:  参考链接:http://www.jianshu.com/p/fd4c46c31508  这个小的项目是参考ManoBoo的简书的,链接在上方,自己在仿做的过程中,也离不开Man ...

  5. AADC安装指南

    可选功能中,”密码哈希同步“可以将本地域账号的密码默认每三小时同步到O365:”密码回写“则是反过来,但是世纪互联的答复是”此功能需要Auzre AD Service功能,目前国内版还不支持使用,国际 ...

  6. Apache Storm源码阅读笔记

    欢迎转载,转载请注明出处. 楔子 自从建了Spark交流的QQ群之后,热情加入的同学不少,大家不仅对Spark很热衷对于Storm也是充满好奇.大家都提到一个问题就是有关storm内部实现机理的资料比 ...

  7. Netty In Action

    1 introduction 1.2 Asynchronous by design two most common ways to work with or implement an asynchro ...

  8. 3D滚动下拉菜单-简直不要太任性

    预览 先看看最终效果 简介 由来 最初看到这个是在14年5月,猛戳这里:妙味官网,觉得非常炫.想要做出来,所以就开始学习web. 那时候是做c/s的,也因为这个走上了b/s之路,(゚Д゚≡゚Д゚) 现 ...

  9. 表单验证:$tablePrefix(定义表前缀);$trueTableName = 'yonghu',找到真实表名(yonghu)表;create($attr,0)两个参数;批量验证(返回数组);ajax+动态验证表单

    *$tablePrefix是定义在Model中的,优先级大于配置文件中,如果项目中表前缀全部比如为"a_",并且在配置文件中定义了 'DB_PREFIX'=>'a_' 后期如 ...

  10. PyInstaller打包步骤简记

    pyinstaller 下载地址:http://www.pyinstaller.org/ 下载后用cmd进入解压文件夹 python setup.py install 安装. 最近用pyinstall ...