SSM框架下分页的实现(封装page.java和List<?>)
来源:互联网 发布:mac dock栏图标隐藏 编辑:程序博客网 时间:2024/06/04 20:12
实现分页时,我们需要向页面中传两个参数:
- page对象(封装了页码,页容,总页数,总记录数,取得选择记录的初始位置)
- 集合对象(封装了bean类的信息)
也就是说,我们需要从service层获取到两个值,但是一个函数只有返回值(?),如何解决?
(1)第一种:写两个函数不就行了;
(2)第二种:添加引用;
(3)第三种:封装:
① 将 List 封装到 Page 中
② 新建一个类,封装 Page 和 List
个人认为,分开写比较好(3.2),
1、新建一个 LimitPageList 类
1 public class LimitPageList { 2 private Page page; 3 private List<?> list; 4 public Page getPage() { 5 return page; 6 } 7 public void setPage(Page page) { 8 this.page = page; 9 }10 public List<?> getList() {11 return list;12 }13 public void setList(List<?> list) {14 this.list = list;15 }16 }
Page工具类
1 public class Page implements Serializable { 2 private static final long serialVersionUID = -3198048449643774660L; 3 4 private int pageNow = 1; // 当前页数 5 6 private int pageSize = 10; // 每页显示记录的条数 7 8 private int totalCount; // 总的记录条数 9 10 private int totalPageCount; // 总的页数11 12 @SuppressWarnings("unused")13 private int startPos; // 开始位置,从0开始14 15 public Page(){}16 17 //通过构造函数 传入 总记录数 和 当前页18 public Page(int totalCount, int pageNow) {19 this.totalCount = totalCount;20 this.pageNow = pageNow;21 }22 23 //取得总页数,总页数=总记录数/每页显示记录的条数24 public int getTotalPageCount() {25 totalPageCount = getTotalCount() / getPageSize();26 return (totalCount % pageSize == 0) ? totalPageCount : totalPageCount + 1;27 }28 29 public void setTotalPageCount(int totalPageCount) {30 this.totalPageCount = totalPageCount;31 }32 33 public int getPageNow() {34 return pageNow;35 }36 37 public void setPageNow(int pageNow) {38 this.pageNow = pageNow;39 }40 41 public int getPageSize() {42 return pageSize;43 }44 45 public void setPageSize(int pageSize) {46 this.pageSize = pageSize;47 }48 49 public int getTotalCount() {50 return totalCount;51 }52 53 public void setTotalCount(int totalCount) {54 this.totalCount = totalCount;55 }56 57 //取得选择记录的初始位置58 public int getStartPos() {59 return (pageNow - 1) * pageSize;60 }61 62 }
2、在mapper层实现获取分页记录和获取总的记录数的方法,并在 xml 文件中做实现
1 public interface StudentMapper { 2 /** 3 * 获取分页记录 4 * @param startPos:从数据库中第几行开始获取 5 * @param pageSize:获取的条数 6 * @return 返回pageSize条数据的集合,数据足够多 7 */ 8 List<Student> selectByPage(@Param(value = "startPos") Integer startPos, 9 @Param(value = "pageSize") Integer pageSize);10 11 /**12 * 获取数据库总的记录数13 * @return 返回数据库表的总条数14 */15 int getCount();16 17 }
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 3 <mapper namespace="com.bwlu.mapper.StudentMapper" > 4 <resultMap id="BaseResultMap" type="com.bwlu.bean.Student" > 5 <id column="stu_id" property="stu_id" jdbcType="INTEGER" /> 6 <result column="stu_name" property="stu_name" jdbcType="VARCHAR" /> 7 <result column="stu_age" property="stu_age" jdbcType="INTEGER" /> 8 <result column="stu_gender" property="stu_gender" jdbcType="INTEGER" /> 9 </resultMap>10 11 <!-- 分页SQL语句 --> 12 <select id="selectByPage" resultMap="BaseResultMap"> 13 select * from student limit #{startPos},#{pageSize}14 </select> 15 16 <!-- 取得记录的总数 --> 17 <select id="getCount" resultType="java.lang.Integer">18 SELECT COUNT(*) FROM student 19 </select> 20 21 </mapper>
3、在service层添加业务逻辑(方法)
1 @Autowired 2 private StudentMapper studentMapper; 3 /** 4 * 获取分页记录 5 * @param pageNow:当前页码,若为null值,则为1 6 * @return 返回page和list集合 7 */ 8 public LimitPageList getLimitPageList(Integer pageNow) { 9 LimitPageList LimitPageStuList = new LimitPageList();10 int totalCount=studentMapper.getCount();//获取总的记录数11 List<Student> stuList=new ArrayList<Student>();12 Page page=null;13 if(pageNow!=null){14 page=new Page(totalCount, pageNow);15 page.setPageSize(4);16 stuList=studentMapper.selectByPage(page.getStartPos(), page.getPageSize());//从startPos开始,获取pageSize条数据17 }else{18 page=new Page(totalCount, 1);//初始化pageNow为119 page.setPageSize(4);20 stuList=studentMapper.selectByPage(page.getStartPos(), page.getPageSize());//从startPos开始,获取pageSize条数据21 }22 LimitPageStuList.setPage(page);23 LimitPageStuList.setList(stuList);24 return LimitPageStuList;25 }
4、controller实现
1 @Autowired 2 private StudentService studentService; 3 @RequestMapping(value="/show",method=RequestMethod.GET) 4 public String getStuList(Model m,@RequestParam(value="pageNow",required=false) Integer pageNow){ 5 LimitPageList limitPageStuList = studentService.getLimitPageList(pageNow); 6 Page page = limitPageStuList.getPage(); 7 //强制类型转换 8 List<Student> stuList = (List<Student>) limitPageStuList.getList(); 9 m.addAttribute("page", page);10 m.addAttribute("stuList", stuList);11 return "student/showInfo";12 }
5、页面实现
1 <%@page import="com.bwlu.common.Page"%> 2 <%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 5 <% 6 String rootPath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/"; 7 %> 8 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 9 <html>10 <head>11 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">12 <title>Insert title here</title>13 <link href="<%=rootPath %>public/css/pageBar.css" rel="stylesheet" type="text/css"/>14 <script type="text/javascript" src="<%=rootPath %>public/js/jquery-3.2.1.js"></script>15 <script type="text/javascript" src="<%=rootPath %>public/js/jquery-3.2.1.min.js"></script>16 </head>17 <body>18 <div class="page_nav">19 <c:choose>20 <c:when test="${page.totalPageCount <= 10}"><!-- 如果总页数小于10,则全部显示 -->21 <c:set var="begin" value="1"></c:set>22 <c:set var="end" value="${page.totalPageCount }"></c:set>23 </c:when>24 <c:when test="${page.pageNow <= 5 }"><!-- 如果总页数小于5,则显示1-10页 -->25 <c:set var="begin" value="1"></c:set>26 <c:set var="end" value="10"></c:set>27 </c:when>28 <c:otherwise><!-- 否则,显示前5页和后5页,保证当前页在中间 -->29 <c:set var="begin" value="${page.pageNow-5 }"></c:set>30 <c:set var="end" value="${page.pageNow+5 }"></c:set>31 <c:if test="${end > page.totalPageCount }"><!-- 如果end值小于总的记录数,则显示最后10页 -->32 <c:set var="end" value="${page.totalPageCount}"></c:set>33 <c:set var="begin" value="${end-10 }"></c:set>34 </c:if>35 </c:otherwise>36 </c:choose>37 <c:choose>38 <c:when test="${page.pageNow != 1 }"><!-- 如果当前页为1,则不显示首页和上一页 -->39 <a href="?pageNow=1">首页</a> 40 <a href="?pageNow=${page.pageNow-1 }">上一页</a>41 </c:when>42 </c:choose>43 <!-- 遍历页码 -->44 <c:forEach begin="${begin }" end="${end }" var="index">45 <c:choose>46 <c:when test="${page.pageNow == index }"><!-- 如果为当前页,则特殊显示 -->47 <a style="height:24px; margin:0 3px; border:none; background:#C00;">${index}</a>48 </c:when>49 <c:otherwise><!-- 否则,普通显示 -->50 <a href="?pageNow=${index }">${index }</a>51 </c:otherwise>52 </c:choose>53 </c:forEach>54 <c:choose>55 <c:when test="${page.pageNow != page.totalPageCount }"><!-- 如果当前页为总的记录数,则不显示末页和下一页 -->56 <a href="?pageNow=${page.pageNow+1 }">下一页</a> 57 <a href="?pageNow=${page.totalPageCount }">末页</a>58 </c:when>59 </c:choose>60 共${page.totalPageCount }页,${page.totalCount }条记录 到第<input61 value="${page.pageNow }" name="pn" id="pn_input" />页 <input62 id="pn_btn" type="button" value="确定">63 <script type="text/javascript">64 //为按钮绑定一个单击响应函数65 $("#pn_btn").click(function() {66 //获取到要跳转的页码67 var pageNow = $("#pn_input").val();68 //通过修改window.location属性跳转到另一个页面69 window.location = "?pageNow=" + pageNow;70 });71 </script>72 </div>73 </body>74 </html>
阅读全文
0 0
- SSM框架下分页的实现(封装page.java和List<?>)
- Java SSM框架实现分页
- SSM框架实现分页和搜索分页
- SSM框架-实现分页和搜索分页
- SSM框架---实现分页
- SSM框架下的分页查询显示
- Page分页和封装page页面
- SSM框架——实现分页和搜索分页
- SSM框架——实现分页和搜索分页
- SSM框架——实现分页和搜索分页
- SSM框架——实现分页和搜索分页
- SSM框架——实现分页和搜索分页
- SSM框架——实现分页和搜索分页
- SSM框架——实现分页和搜索分页
- SSM框架下用laypage和ajax实现分页和数据交互
- 基于SSM和jstl的分页实现
- SSM下的分页
- java web(SSM框架)实现博客的上一篇、下一篇功能
- CountDownTimer用法
- c++primer 6.3.3节练习(返回数组指针的4个方法)
- C++:STL标准入门汇总
- The hierarchy of the type LogBeforeAdvice is inconsistent
- PuTTY + Xming 实现图形安装 Oracle
- SSM框架下分页的实现(封装page.java和List<?>)
- 顺序表各种基本运算的算法
- 设计模式 5/23 原型模式
- cnn、rnn实现中文文本分类(基于tensorflow)
- Emgucv3.0的安装与配置
- 秋招已经结束了吗?
- java文件上传技术
- HTTP协议详解
- Win10(64bit)+Emgu CV3.0.0+VS2013 下载&安装&配置