公司动态
S-mall-ssm 分页功能实现:PageHelper与自定义Pagination类的完美配合
S-mall-ssm 分页功能实现PageHelper与自定义Pagination类的完美配合【免费下载链接】S-mall-ssm小小商城系统JavaWEB项目基于SSM仿天猫页面功能齐全实现了自动处理关联查询的通用Mapper、抽象 BaseService 类、注解鉴权、参数注解校验等项目地址: https://gitcode.com/gh_mirrors/smal/S-mall-ssmS-mall-ssm 是一个基于 SSMSpring SpringMVC MyBatis框架、仿天猫界面的 JavaWeb 商城系统它的分页功能实现极具学习价值查询交给 PageHelper 分页插件页面交互交给自定义的 Pagination 分页类二者各司其职又紧密配合。对于想搞懂 SSM 项目如何优雅做分页的新手来说这套方案堪称教科书级示范。本文将逐步拆解它的分页实现原理让你一看就懂、拿来即用。为什么商城系统必须做分页商品、订单、用户数据动辄成百上千条如果一次性全部查出再渲染到页面数据库查询慢页面加载卡顿浏览器渲染压力大用户体验差数据量一旦上涨系统性能直线下降所以列表分页是所有后台管理系统的刚需。S-mall-ssm 的方案是「两条腿走路」PageHelper 负责「查得准」Pagination 类负责「算得清」。第一步引入 PageHelper 分页插件 PageHelper 是国内最流行的 MyBatis 分页插件官方文档的配置方式就是加入 Maven 依赖。在 S-mall-ssm 的pom.xml中可以看到dependency groupIdcom.github.pagehelper/groupId artifactIdpagehelper/artifactId version5.1.2/version /dependencyPageHelper 的魔法在于它会在 MyBatis 执行查询前自动把 SQL 拼接上LIMIT语句你完全不用手写分页 SQL一行代码即可实现物理分页。第二步认识自定义 Pagination 分页类 光有插件还不够S-mall-ssm 还自己封装了一个Pagination类位于src/main/java/tmall/util/Pagination.java专门负责记录分页状态、计算分页信息。它的核心属性只有 4 个属性含义作用start起始位置本页第一条记录的偏移量count每页条数默认每页显示 5 条total数据总数由查询结果回填param附加参数拼在分页链接末尾保留搜索条件更巧妙的是它还内置了一组「自算」方法getTotalPage()计算总页数、getLastPage()计算最后一页起始位置、isHasPrevious()/isHasNext()判断是否有上一页/下一页。前端 JSP 拿到这个对象后什么都不用算直接取值渲染即可。第三步PageHelper 与 Pagination 如何配合这是整篇文章的核心在 S-mall-ssm 的抽象 Service 基类BaseServiceImpl位于src/main/java/tmall/service/impl/BaseServiceImpl.java中两者的配合只有短短几行PageHelper.offsetPage(pagination.getStart(), pagination.getCount()); list mapper.selectByExample(example, depth); pagination.setTotal((int) new PageInfo(list).getTotal());逻辑非常清晰调用PageHelper.offsetPage()把起始位置和每页条数交给插件正常执行查询PageHelper 自动拦截 SQL 完成物理分页通过PageInfo拿到总记录数回填到Pagination.total属性这样 Pagination 对象就「活了」——它知道自己当前在哪页、总共多少页、有没有下一页前端可以随心所欲地渲染。第四步Controller 中的分页参数自动绑定 在 S-mall-ssm 的 Controller 中分页参数处理得极其优雅。以后台分类列表CategoryController为例RequestMapping(list) public String list(Model model, Pagination pagination) throws Exception { ListCategory categories categoryService .list(pagination, pagination, order, recommend desc, id desc); model.addAttribute(categories, categories); return admin/listCategory; }Spring MVC 会自动把 URL 上的?start10绑定到 Pagination 对象的start字段开发者完全不用手动解析参数。而前端首页ShowController还能按需定制每页条数Pagination pagination new Pagination(); pagination.setCount(13);一句话概括Service 层只认 Pagination 对象PageHelper 只认 start 和 count各管一段互不干扰。第五步JSP 分页条渲染原理 数据查出来了最后一步是渲染分页条。S-mall-ssm 把分页条封装成了公共片段adminPage.jsp位于src/main/webapp/WEB-INF/jsp/admin/common/adminPage.jsp复用性极高用pagination.hasPrevious控制「首页 / 上一页」按钮的禁用状态用c:forEach循环totalPage生成数字页码用vs.index * count start高亮当前页用${pagination.param}保留排序、搜索等附加参数任何管理页面只要引入这个片段、传入一个 Pagination 对象瞬间拥有完整的分页导航包括首页、末页、上一页、下一页和数字页码。总结这套分页方案的三大优势 代码量极少抽象 BaseService 通用 Mapper 自动处理关联查询业务层只需传一个 Pagination 对象前后端解耦PageHelper 管数据库层Pagination 管页面层职责清晰、便于维护开箱即用公共分页条 JSP 一次封装所有列表页面复用改一处全站生效如果你也想学习完整的 SSM 商城分页实现可以直接克隆项目源码研究git clone https://gitcode.com/gh_mirrors/smal/S-mall-ssm。重点阅读Pagination.java、BaseServiceImpl.java、adminPage.jsp三个文件你就能完全吃透这套 PageHelper 自定义分页类的组合拳把它迁移到自己的项目中去【免费下载链接】S-mall-ssm小小商城系统JavaWEB项目基于SSM仿天猫页面功能齐全实现了自动处理关联查询的通用Mapper、抽象 BaseService 类、注解鉴权、参数注解校验等项目地址: https://gitcode.com/gh_mirrors/smal/S-mall-ssm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考