之前没自己弄过分页,这次自己琢磨了个,下次再有项目需要时可以借鉴!
1、分页类:
package com.heitian.ssm.model; import java.util.ArrayList; import java.util.List; public class PageModel<E> { //结果集 private List<E> list; //查询记录数 private Long totalRecords; //每页多少条数据 private Long pageSize; //第几页 private int pageNo; private int showSize = 10; /** * 总页数 * @return */ public Long getTotalPages(){ return(totalRecords+pageSize-1)/pageSize; } /** * 获取要显示的页码数 * @return */ public List<Integer> getShowPageNumber(){ List<Integer> showPageNumbers = new ArrayList<>(); int half = showSize/2; if(pageNo<=half){ for(int i = 1;i<showSize+1;i++){ if(i<=getTotalPages()){ if(i>=1){ showPageNumbers.add(i); } }else{ break; } } }else if(pageNo > half && pageNo < getTotalPages()-half){ for(int i = pageNo-half;i<pageNo+half+1;i++){ if(i<=getTotalPages()){ if(i>=1){ showPageNumbers.add(i); } }else{ break; } } }else if(pageNo >getTotalPages()- half){ for(int i = Integer.valueOf(getTotalPages()+"")- showSize;i<getTotalPages()+1;i++){ if(i<=getTotalPages()){ if(i>=1){ showPageNumbers.add(i); } }else{ break; } } } return showPageNumbers; } /** * 取得首页 * @return */ public int getTopPageNo(){ return 1; } public List<E> getList() { return list; } /** * 上一页 * @return */ public int getPreviousPageNo(){ if(pageNo<=1){ return 1; } return pageNo-1; } /** * 下一页 * @return */ public Long getNextPageNo(){ if(pageNo>=getBottomPageNo()){ return getBottomPageNo(); } return Long.valueOf(pageNo+1); } /** * 取得尾页 * @return */ public Long getBottomPageNo(){ return getTotalPages(); } public void setList(List<E> list) { this.list = list; } public Long getTotalRecords() { return totalRecords; } public void setTotalRecords(Long totalRecords) { this.totalRecords = totalRecords; } public Long getPageSize() { return pageSize; } public void setPageSize(Long pageSize) { this.pageSize = pageSize; } public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } }2、单独的分页页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> <%@ page isELIgnored="false" %> <footer class="panel-footer"> <div class="row"> <div class="col-sm-4 hidden-xs"></div> <div class="col-sm-4 text-center"> <small class="text-muted inline m-t-sm m-b-sm"> 第${(pageModel.pageNo-1)*pageModel.pageSize+1} 到 ${pageModel.pageNo*pageSize>pagemodel.totalRecords?pageModel.totalRecords:pageModel.pageNo*pageModel.pageSize} 条, 总共:${pageModel.getTotalPages()} 页 ${pageModel.totalRecords} 记录 </small> </div> <div class="col-sm-4 text-right text-center-xs"> <ul class="pagination pagination-sm m-t-none m-b-none"> <li><a href="${request_url}?page=${pageModel.getPreviousPageNo()}${page_params}"><i class="fa fa-chevron-left"></i></a></li> <c:forEach var="item" items="${pageModel.getShowPageNumber()}"> <li ${item==pageModel.pageNo?"class=\"active\"":""}> <a href="${request_url}?page=${item}${page_params}" >${item}</a> </li> </c:forEach> <li><a href="${request_url}?page=${pageModel.getNextPageNo()}${page_params}"><i class="fa fa-chevron-right"></i></a></li> </ul> </div> </div> </footer>3、controller类
package com.heitian.ssm.controller; import com.heitian.ssm.model.PageModel; import com.heitian.ssm.model.User; import com.heitian.ssm.service.UserService; import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @Controller @RequestMapping("/user") public class UserController { private Logger log = Logger.getLogger(UserController.class); @Resource private UserService userService; @RequestMapping("/showUser") public String showUser(HttpServletRequest request, Model model,@RequestParam Map<String,Object> params){ log.info("查询所有用户信息"); PageModel<User> pageModel = new PageModel<>(); if(params.get("page") ==null){ params.put("page","1"); } pageModel.setPageNo(Integer.valueOf(params.get("page")+"")); pageModel.setPageSize(10L); params.put("offset",(pageModel.getPageNo()-1)*pageModel.getPageSize()); params.put("limit",10); List<User> userList = userService.getAllUser(params); Long count = userService.count(params); pageModel.setTotalRecords(count); pageModel.setPageSize(pageModel.getPageSize()); pageModel.setList(userList); model.addAttribute("pageModel",pageModel); // model.addAttribute("params",params); model.addAttribute("request_url","showUser"); model.addAttribute("userList",userList); //键值对获取key,value Set<String> strings = params.keySet(); Iterator<String> iterator = strings.iterator(); StringBuffer pageParams = new StringBuffer(); while(iterator.hasNext()){ String key = iterator.next(); String value = params.get(key).toString().trim()+""; pageParams.append("&"+key+"="+value); } model.addAttribute("page_params",pageParams.toString()); return "showUser"; } }4、Dao层
package com.heitian.ssm.dao; import com.heitian.ssm.model.User; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import java.util.List; import java.util.Map; @Repository public interface UserDao { List<User> selectAllUser(Map<String,Object> params); Long count(Map<String,Object> params); }5、xml sql语句层
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.heitian.ssm.dao.UserDao"> <resultMap id="UserBaseMap" type="com.heitian.ssm.model.User"> <id column="id" property="id" jdbcType="BIGINT"/> <result column="user_name" property="userName" jdbcType="VARCHAR"/> <result column="user_phone" property="userPhone" jdbcType="VARCHAR"/> <result column="user_email" property="userEmail" jdbcType="VARCHAR"/> <result column="user_pwd" property="userPwd" jdbcType="VARCHAR"/> <result column="pwd_salt" property="pwdSalt" jdbcType="VARCHAR"/> <result column="create_time" property="createTime" jdbcType="DATE"/> <result column="modify_time" property="modifyTime" jdbcType="DATE"/> <result column="is_delete" property="isDelete" jdbcType="SMALLINT"></result> </resultMap> <select id="selectAllUser" resultMap="UserBaseMap"> SELECT * FROM t_user limit ${offset},${limit} </select> <select id="count" resultType="java.lang.Long"> SELECT COUNT(*) FROM (SELECT * FROM t_user) as t </select> </mapper>