核心提示:效果图: 步骤如下:1、创建两个实体类package com.learning.po.page;public class Page { /*当前页数*/ private int currentPage...
效果图:

步骤如下:
1、创建两个实体类
package com.learning.po.page; public class Page { /*当前页数*/ private int currentPage; /*页面大小*/ private int pageSize; /*总条数*/ private int total; public int getCurrentPage() { return currentPage; } public void setCurrentPage(int currentPage) { this.currentPage = currentPage; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotal() { return total; } public void setTotal(int total) { this.total = total; } public Integer getTotalPage(){ return this.total % this.pageSize == 0 ? this.total / this.pageSize : this.total / this.pageSize + 1; } }
package com.learning.po.page; public class Book { private Integer id; private String code; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
2、编写mapping
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "https://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.learning.dao.page.BookMapper" > <resultMap id="BaseResultMap" type="com.learning.po.page.Book" > <id column="id" property="id" jdbcType="INTEGER" /> <result column="code" property="code" jdbcType="VARCHAR" /> <result column="name" property="name" jdbcType="VARCHAR" /> </resultMap> <select id="query" resultMap="BaseResultMap"> select * from book limit #{current},#{pagesize} </select> <select id="total" resultType="java.lang.Integer"> select count(*) as c from book </select> </mapper>
3、编写dao
package com.learning.dao.page; import java.util.List; import org.apache.ibatis.annotations.Param; import com.learning.po.page.Book; public interface BookMapper { List<Book> query(@Param("current") Integer current, @Param("pagesize") Integer pagesize); int total(); }4、编写serviceImpl
package com.learning.service.page.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.learning.dao.page.BookMapper; import com.learning.po.page.Book; import com.learning.service.page.BookService; @Transactional @Service("bookService") public class BookServiceImpl implements BookService { @Autowired private BookMapper bookMapper; @Override public List<book> query(Integer current, Integer pagesize) { return bookMapper.query(current, pagesize); } @Override public int total() { return bookMapper.total(); } }
5、编写service
package com.learning.service.page; import java.util.List; import com.learning.po.page.Book; public interface BookService { List<book> query(Integer current, Integer pagesize); int total(); }
6、编写basecontroller
package com.learning.core.common; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.ModelAttribute; import com.learning.po.page.Page; public class BaseController { protected HttpServletRequest request; protected HttpServletResponse response; @ModelAttribute public void setRequest(HttpServletRequest request) { this.request = request; } @ModelAttribute public void setResponse(HttpServletResponse response) { this.response = response; } public void setPageTotal(Page page) { int currentpage = page.getCurrentPage(); int total = (int) page.getTotalPage(); int start = 0; int end = 0; if (total < 6) { start = 1; end = start + total - 1; } else { start = currentpage - 2; if (start < 1) { start = 1; } end = start + 4; if (end > total) { end = total; start = end - 4; } } String pagetotal = ""; for (int i = start; i <= end; i++) { if ("".equals(pagetotal)) { pagetotal = i + ""; } else { pagetotal += "," + i; } } request.setAttribute("end", end); request.setAttribute("pagetotal", pagetotal); } public Page setPage() { String pagesize = request.getParameter("pageSize"); String currentPage = request.getParameter("currentPage"); Page page = new Page(); page.setPageSize((pagesize == null) ? 1 : Integer.parseInt(pagesize)); page.setCurrentPage((currentPage == null) ? 1 : Integer.parseInt(currentPage)); request.setAttribute("page", page); return page; } }
7、编写controller
package com.learning.controller.page; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.learning.core.common.BaseController; import com.learning.po.page.Book; import com.learning.po.page.Page; import com.learning.service.page.BookService; @Controller @RequestMapping("/bookController") public class BookController extends BaseController { @Autowired private BookService bookService; @RequestMapping("/query") public String query() { Page page = super.setPage(); page.setTotal(bookService.total()); super.setPageTotal(page); int start = (page.getCurrentPage() - 1) * page.getPageSize(); List<book> books = bookService.query(start, page.getPageSize()); super.request.setAttribute("books", books); return "/page/book_list"; } }
8、jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c"%> <%@ taglib tagdir="/WEB-INF/tags" prefix="p" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link href="${ctx}/css/bootstrap.min.css" rel="stylesheet" /> <title>分页</title> </head> <body> <form id="form" action="${ctx}/bookController/query.do" method="post"> <p class="pannel"> <p class="pannel-body"> <table class="table table-bordered table-hover"> <thead> <tr> <th>id</th> <th>代码</th> <th>名称</th> </tr> </thead> <tbody> <c:forEach items="${books}" var="item"> <tr> <td>${item.id}</td> <td>${item.code}</td> <td>${item.name}</td> </tr> </c:forEach> </tbody> </table> </p> <p:page></p:page> </p> </form> </body> </html>
9、在WEB-INF目录下创建文件夹tags,在tags目录下创建page.tag
<%@ tag language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core"%> <style type="text/css"> #page ul { list-style: none; line-height: 40px; } #page li { display: block; float: left; } #page li a { text-decoration: none; border: 1px solid #d5d5d5; min-width: 20px; margin-right: 5px; padding: 7px 5px; } .on { color: #fff; background: #428bca; } </style> <p id="pagination"> <input type="hidden" id="currentPage" name="currentPage" value="${page.currentPage}"> <input type="hidden" id="total" value="${page.getTotalPage()}"> <p> <p id="page" style="margin: 0 auto; width: 50%; height: 40px"> <ul> <li><c:if test="${page.currentPage eq 1}"> <a>首页</a> </c:if> <c:if test="${page.currentPage ne 1}"> <a href="javascript:page(1)">首页</a> </c:if></li> <li><c:if test="${page.currentPage eq 1}"> <a>上一页</a> </c:if> <c:if test="${page.currentPage ne 1}"> <a href="javascript:page(${page.currentPage - 1})">上一页</a> </c:if></li> <c:forTokens items="${pagetotal}" delims="," var="item"> <c:if test="${item eq page.currentPage}"> <li><a class="on" href="javascript:page(${item})" style="padding: 7px 12px">${item}</a></li> </c:if> <c:if test="${item ne page.currentPage}"> <li><a href="javascript:page(${item})" style="padding: 7px 12px">${item}</a></li> </c:if> </c:forTokens> <c:if test="${page.getTotalPage() gt end + 1}"> <li style="margin-right: 5px"><label>...</label></li> </c:if> <c:if test="${end ne page.getTotalPage()}"> <li><a href="javascript:page(${page.getTotalPage()})" style="padding: 7px 12px">${page.getTotalPage()}</a></li> </c:if> <li><c:if test="${page.currentPage eq page.getTotalPage()}"> <a>下一页</a> </c:if> <c:if test="${page.currentPage ne page.getTotalPage()}"> <a href="javascript:page(${page.currentPage + 1})">下一页</a> </c:if></li> <li><c:if test="${page.currentPage eq page.getTotalPage()}"> <a>尾页</a> </c:if> <c:if test="${page.currentPage ne page.getTotalPage()}"> <a href="javascript:page(${page.getTotalPage()})">尾页</a> </c:if></li> <li style="line-height: 32px"><input type="text" id="current" name="current" onkeydown="onlyNum()" style="height: 32px; width: 50px; margin-top: 4px; margin-right: 5px"> </li> <li><a href="javascript:setCurrent()">转到</a></li> </ul> </p> </p> </p> <script src="${ctx}/js/jquery-1.11.1.js"></script> <script type="text/javascript"> window.onload = function() { $('#page ul li a').click(function() { if (!isNaN($(this).text())) { var current = $(this).parent().index(); $("ul li").children().removeClass("on"); $(this).addClass("on"); } }); }; function pagesize() { var form = document.getElementById("form"); form.submit(); } function page(c) { $("#currentPage").val(c); var form = document.getElementById("form"); form.submit(); } function setCurrent() { var current = $("#current").val(); var total = $("#total").val(); if (current > 0 && current < total + 1) { $("#currentPage").val(current); var form = document.getElementById("form"); form.submit(); } else { alert("转到页数必须大于零,且小于等于" + total); $("#current").val(""); } } function onlyNum() { if (!(event.keyCode == 46) && !(event.keyCode == 8) && !(event.keyCode == 37) && !(event.keyCode == 39)) if (!((event.keyCode >= 48 && event.keyCode <= 57) || (event.keyCode >= 96 && event.keyCode <= 105))) event.returnValue = false; } </script>