基于SSM的分页
现在基本每一个项目都有用到分页,SSM也是当前企业用到的比较频繁的框架,这里我就总结一下基于SSM的分页:
一、首先我们要准备一个分页的工具类
- /**
- * 分页
- */
- public class Page implements Serializable {
- private static final long serialVersionUID = -3198048449643774660L;
- private int pageNow = 1; // 当前页数
- private int pageSize = 4; // 每页显示记录的条数
- private int totalCount; // 总的记录条数
- private int totalPageCount; // 总的页数
- @SuppressWarnings("unused")
- private int startPos; // 开始位置,从0开始
- @SuppressWarnings("unused")
- private boolean hasFirst;// 是否有首页
- @SuppressWarnings("unused")
- private boolean hasPre;// 是否有前一页
- @SuppressWarnings("unused")
- private boolean hasNext;// 是否有下一页
- @SuppressWarnings("unused")
- private boolean hasLast;// 是否有最后一页
- /**
- * 通过构造函数 传入 总记录数 和 当前页
- * @param totalCount
- * @param pageNow
- */
- public Page(int totalCount, int pageNow) {
- this.totalCount = totalCount;
- this.pageNow = pageNow;
- }
- /**
- * 取得总页数,总页数=总记录数/总页数
- * @return
- */
- public int getTotalPageCount() {
- totalPageCount = getTotalCount() / getPageSize();
- return (totalCount % pageSize == 0) ? 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;
- }
- /**
- * 取得选择记录的初始位置
- * @return
- */
- public int getStartPos() {
- return (pageNow - 1) * pageSize;
- }
- public void setStartPos(int startPos) {
- this.startPos = startPos;
- }
- /**
- * 是否是第一页
- * @return
- */
- public boolean isHasFirst() {
- return (pageNow == 1) ? false : true;
- }
- public void setHasFirst(boolean hasFirst) {
- this.hasFirst = hasFirst;
- }
- /**
- * 是否有首页
- * @return
- */
- public boolean isHasPre() {
- // 如果有首页就有前一页,因为有首页就不是第一页
- return isHasFirst() ? true : false;
- }
- public void setHasPre(boolean hasPre) {
- this.hasPre = hasPre;
- }
- /**
- * 是否有下一页
- * @return
- */
- public boolean isHasNext() {
- // 如果有尾页就有下一页,因为有尾页表明不是最后一页
- return isHasLast() ? true : false;
- }
- public void setHasNext(boolean hasNext) {
- this.hasNext = hasNext;
- }
- /**
- * 是否有尾页
- * @return
- */
- public boolean isHasLast() {
- // 如果不是最后一页就有尾页
- return (pageNow == getTotalCount()) ? false : true;
- }
- public void setHasLast(boolean hasLast) {
- this.hasLast = hasLast;
- }
- }
二、编写mapper.xml的SQL语句
- <!-- 分页SQL语句 -->
- <select id="selectProductsByPage" resultMap="返回值类型">
- select
- *
- from 表名 WHERE user_id = #{userId,jdbcType=INTEGER} limit #{startPos},#{pageSize}
- </select>
- <!-- 取得记录的总数 -->
- <select id="getProductsCount" resultType="long">
- SELECT COUNT(*) FROM 表名 WHERE user_id = #{userId,jdbcType=INTEGER}
- </select>
三、DAO层编写对应的方法
- **
- * 使用注解方式传入多个参数,用户产品分页,通过登录用户ID查询
- * @param page
- * @param userId
- * @return startPos},#{pageSize}
- */
- public List<Products> selectProductsByPage(@Param(value="startPos") Integer startPos,@Param(value="pageSize") Integer pageSize,@Param(value="userId") Integer userId);
- /**
- * 取得产品数量信息,通过登录用户ID查询
- * @param userId
- * @return
- */
- public long getProductsCount(@Param(value="userId") Integer userId);
四、service接口
- /**
- * 分页显示商品
- * @param request
- * @param model
- * @param loginUserId
- */
- void showProductsByPage(HttpServletRequest request,Model model,int loginUserId);
五、service实现类
- @Override
- public void showProductsByPage(HttpServletRequest request, Model model,int loginUserId) {
- String pageNow = request.getParameter("pageNow");
- Page page = null;
- List<ProductWithBLOBs> products = new ArrayList<ProductWithBLOBs>();
- int totalCount = (int) productDao.getProductsCount(loginUserId);
- if (pageNow != null) {
- page = new Page(totalCount, Integer.parseInt(pageNow));
- allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId);
- } else {
- page = new Page(totalCount, 1);
- allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId);
- }
- model.addAttribute("products", products);
- model.addAttribute("page", page);
- }
六、controller层
- /**
- * 初始化 “我的产品”列表 JSP页面,具有分页功能
- *
- * @param request
- * @param model
- * @return
- */
- @RequestMapping(value = "映射路径", method = RequestMethod.GET)
- public String showMyProduct(HttpServletRequest request, Model model) {
- // 取得SESSION中的loginUser
- User loginUser = (User) request.getSession().getAttribute("loginUser");
- // 判断SESSION是否失效
- if (loginUser == null || "".equals(loginUser)) {
- return "redirect:/";
- }
- int loginUserId = loginUser.getUserId();
- //此处的productService是注入的IProductService接口的对象
- this.productService.showProductsByPage(request, model, loginUserId);
- return "跳转到的JSP路径";
- }
基于SSM的分页的更多相关文章
- Java基于ssm框架的restful应用开发
Java基于ssm框架的restful应用开发 好几年都没写过java的应用了,这里记录下使用java ssm框架.jwt如何进行rest应用开发,文中会涉及到全局异常拦截处理.jwt校验.token ...
- 基于SSM的健身房管理系统
基于SSM的健身房管理系统 The project was made in 2020-05-05~2020-05-10 谨以此片博文记录下我的第一个Java小Demo 项目展示 用户登录页 用户注册页 ...
- 基于SSM的租赁管理系统0.1_20161225_项目需求
基于SSM的汽车租赁系统项目计划书 1.产品定位 本系统供提供租赁服务的企业内部使用,供企业员工进行线下操作. 2.需求分析 2.1 能为工作人员提供员工信息的管理功能,具有RBAC基于角色的权限管理 ...
- 基于Angularjs实现分页
前言 学习任何一门语言前肯定是有业务需求来驱动你去学习它,当然ng也不例外,在学习ng前我第一个想做的demo就是基于ng实现分页,除去基本的计算思路外就是使用指令封装成一个插件,在需要分页的列表页面 ...
- 基于SSM实现的简易员工管理系统
之前自学完了JAVA基础,一直以来也没有做什么好玩的项目,最近暑假,时间上比较空闲,所以又学习了一下最近在企业实际应用中比较流行的SSM框架,以此为基础,通过网络课程,学习编写了一个基于SSM实现的M ...
- 基于SSM之Mybatis接口实现增删改查(CRUD)功能
国庆已过,要安心的学习了. SSM框架以前做过基本的了解,相比于ssh它更为优秀. 现基于JAVA应用程序用Mybatis接口简单的实现CRUD功能: 基本结构: (PS:其实这个就是用的Mapper ...
- 基于ArcGISServer进行分页矢量查询的方案进阶
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 在空间查询中,我们对查询结果要求以分页形式进行展示.G ...
- 基于SSM的Java Web应用开发原理初探
SSM开发Web的框架已经很成熟了,成熟得以至于有点落后了.虽然如今是SOA架构大行其道,微服务铺天盖地的时代,不过因为仍有大量的企业开发依赖于SSM,本文简单对基于SSM的Java开发做一快速入门, ...
- 基于SSM框架配置多数据源
项目基于ssm + maven,通过注解可以实现自动切换数据源. 一.pom.xml <?xml version="1.0" encoding="UTF-8&quo ...
随机推荐
- SecureCRT 使用 rz 和 sz 命令
1.下载软件 rzsz-3.34.tar.gz,登录linux,用命令 wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz下载. 2.解 ...
- Xcode 插件失效
1.终端输入: 如果放在了应用程序里,就是这个: defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityU ...
- java-集合4
浏览以下内容前,请点击并阅读 声明 对象排序 一个List对象中如果元素类型为String,则其按字母表顺序排序,而如果元素类型为Date,则按照年代排序,那如何判断元素的排序呢?String和Dat ...
- PK淘宝BUY+,京东推出AR购物应用JD Dream
今年双十一淘宝推出了虚拟现实VR购物"BUY+",用户可以在虚拟环境中选购商品.那作为竞争对手的京东将使出什么绝招呢?在近日上海举办的谷歌开发者大会上得到了答案.会上京东推 ...
- 惠普披甲过VR寒冬,花费巨资开发VR游戏
2016被称为VR元年,各大公司都在积极推动该领域的研究,其中HTC.0culus.索尼的成绩是最高的,不仅推出了自家研发的头显,而且销量还很可观.惠普在VR领域自然也有所投入,但是并没有比 ...
- web Worker使js实现‘多线程’?
大家都知道js是单线程的,在上一段js执行结束之前,后面的js绝对不会执行,那么为什么标题说js实现‘多线程’,虽然说加了引号,可是标题也不能乱写不是,可恶的标题党? 姑且抛开标题不说,先说我们经常会 ...
- IPV6入门篇
引言 由于互联网的快速发展与普及,原有的IPV4地址已不能满足网络用户的需求,虽然NAT可以缓解IPV4地址的耗尽,但NAT破坏了网络环境的开放.透明以及端到端的特性,因此IPV6地址协议应运而生.I ...
- Redis的PHP操作手册(转)
String 类型操作 string是redis最基本的类型,而且string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象 $redis-> ...
- [IOS]译Size Classes with Xcode 6: One Storyboard for all Sizes
Size Classes with Xcode 6: One Storyboard for all Sizes 为所有的尺寸准备一个Storyboard 我最喜欢的Xcode6的特性是新的size c ...
- NGUI实现技能CD效果
在NGUI中使用Sprite的遮罩效果可以很轻松的实现技能CD效果. 具体实现步骤: ①新建一个技能图标的Sprite 如图中的Skill001,再在该技能Sprite上添加一个Sprite做遮罩, ...