zoukankan      html  css  js  c++  java
  • SSM项目中表单分页操作(PageHepler使用)

    Maven pom.xml添加依赖

    <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.2</version>
    </dependency>
    1
    2
    3
    4
    5
    applicationContext.xml中 SqlSessionFactoryBean中添加拦截器数据库可以更换我用的是mysql数据库,使用其他数据库将mysql更换成其他数据库即可。

    <bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"></property>
    <!-- 传入PageHelper的插件 -->
    <property name="plugins">
    <array>
    <!-- 传入插件的对象 -->
    <bean class="com.github.pagehelper.PageInterceptor">
    <property name="properties">
    <props>
    <prop key="helperDialect">mysql</prop>
    <prop key="reasonable">true</prop>
    </props>
    </property>
    </bean>
    </array>
    </property>
    </bean>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    下面就可以使用分页了,需要在serviceImpl调用dao层代码的上一行添加
    PageHelper.startPage(pageNum,pageSize);

    @Override
    public List<Syslog> selAll(Integer pageNum, Integer pageSize) {
    PageHelper.startPage(pageNum,pageSize);
    return iSysLogDao.selAll();
    }
    1
    2
    3
    4
    5
    controller层需要将信息储存在PageInfo这个对象中

    @RequestMapping("/show")
    public ModelAndView show(@RequestParam(defaultValue = "1",required = true) Integer pageNum,@RequestParam(defaultValue = "10",required = true) Integer pageSize){
    ModelAndView modelAndView=new ModelAndView("syslog-list");
    List<Syslog> syslogList=iSysLogService.selAll(pageNum,pageSize);
    PageInfo pageInfo=new PageInfo(syslogList);
    modelAndView.addObject("pageInfo",pageInfo);

    return modelAndView;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    需要注意在前端调用pageInfo.list

    <c:forEach items="${pageInfo.list}" var="syslog">
    <tr>
    <td><input name="ids" type="checkbox"></td>
    <td>${syslog.id}</td>
    <td>${syslog.visitTimeStr }</td>
    <td>${syslog.username }</td>
    <td>${syslog.ip }</td>
    <td>${syslog.url}</td>
    <td>${syslog.executionTime}毫秒</td>
    <td>${syslog.method}</td>
    </tr>
    </c:forEach>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    pageInfo封装了分页信息,可以直接使用,

    <div class="box-tools pull-right">
    <ul class="pagination">
    <li><a href="${pageContext.request.contextPath}/sysLog/show?pageNum=1&pageSize=${pageInfo.pageSize}" aria-label="Previous">首页</a></li>
    <li><a href="${pageContext.request.contextPath}/sysLog/show?pageNum=${pageInfo.pageNum-1}&pageSize=${pageInfo.pageSize}">上一页</a></li>
    <c:forEach begin="1" end="${pageInfo.pages}" var="pageNum">
    <li><a href="${pageContext.request.contextPath}/sysLog/show?pageNum=${pageNum}&pageSize=${pageInfo.pageSize}">${pageNum}</a></li>
    </c:forEach>
    <li><a href="${pageContext.request.contextPath}/sysLog/show?pageNum=${pageInfo.pageNum+1}&pageSize=${pageInfo.pageSize}">下一页</a></li>
    <li><a href="${pageContext.request.contextPath}/sysLog/show?pageNum=${pageInfo.pages}&pageSize=${pageInfo.pageSize}" aria-label="Next">尾页</a></li>
    </ul>
    </div>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    下面是PageInfo源代码

    /*
    * The MIT License (MIT)
    *
    * Copyright (c) 2014-2017 abel533@gmail.com
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in
    * all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    * THE SOFTWARE.
    */

    package com.github.pagehelper;

    import java.io.Serializable;
    import java.util.Collection;
    import java.util.List;

    /**
    * 对Page<E>结果进行包装
    * <p/>
    * 新增分页的多项属性,主要参考:http://bbs.csdn.net/topics/360010907
    *
    * @author liuzh/abel533/isea533
    * @version 3.3.0
    * @since 3.2.2
    * 项目地址 : http://git.oschina.net/free/Mybatis_PageHelper
    */
    @SuppressWarnings({"rawtypes", "unchecked"})
    public class PageInfo<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;

    //由于startRow和endRow不常用,这里说个具体的用法
    //可以在页面中"显示startRow到endRow 共size条数据"

    //当前页面第一个元素在数据库中的行号
    private int startRow;
    //当前页面最后一个元素在数据库中的行号
    private int endRow;
    //总记录数
    private long total;
    //总页数
    private int pages;
    //结果集
    private List<T> list;

    //前一页
    private int prePage;
    //下一页
    private int nextPage;

    //是否为第一页
    private boolean isFirstPage = false;
    //是否为最后一页
    private boolean isLastPage = false;
    //是否有前一页
    private boolean hasPreviousPage = false;
    //是否有下一页
    private boolean hasNextPage = false;
    //导航页码数
    private int navigatePages;
    //所有导航页号
    private int[] navigatepageNums;
    //导航条上的第一页
    private int navigateFirstPage;
    //导航条上的最后一页
    private int navigateLastPage;

    public PageInfo() {
    }

    /**
    * 包装Page对象
    *
    * @param list
    */
    public PageInfo(List<T> list) {
    this(list, 8);
    }

    /**
    * 包装Page对象
    *
    * @param list page结果
    * @param navigatePages 页码数量
    */
    public PageInfo(List<T> list, int navigatePages) {
    if (list instanceof Page) {
    Page page = (Page) list;
    this.pageNum = page.getPageNum();
    this.pageSize = page.getPageSize();

    this.pages = page.getPages();
    this.list = page;
    this.size = page.size();
    this.total = page.getTotal();
    //由于结果是>startRow的,所以实际的需要+1
    if (this.size == 0) {
    this.startRow = 0;
    this.endRow = 0;
    } else {
    this.startRow = page.getStartRow() + 1;
    //计算实际的endRow(最后一页的时候特殊)
    this.endRow = this.startRow - 1 + this.size;
    }
    } else if (list instanceof Collection) {
    this.pageNum = 1;
    this.pageSize = list.size();

    this.pages = this.pageSize > 0 ? 1 : 0;
    this.list = list;
    this.size = list.size();
    this.total = list.size();
    this.startRow = 0;
    this.endRow = list.size() > 0 ? list.size() - 1 : 0;
    }
    if (list instanceof Collection) {
    this.navigatePages = navigatePages;
    //计算导航页
    calcNavigatepageNums();
    //计算前后页,第一页,最后一页
    calcPage();
    //判断页面边界
    judgePageBoudary();
    }
    }

    /**
    * 计算导航页
    */
    private void calcNavigatepageNums() {
    //当总页数小于或等于导航页码数时
    if (pages <= navigatePages) {
    navigatepageNums = new int[pages];
    for (int i = 0; i < pages; i++) {
    navigatepageNums[i] = i + 1;
    }
    } else { //当总页数大于导航页码数时
    navigatepageNums = new int[navigatePages];
    int startNum = pageNum - navigatePages / 2;
    int endNum = pageNum + navigatePages / 2;

    if (startNum < 1) {
    startNum = 1;
    //(最前navigatePages页
    for (int i = 0; i < navigatePages; i++) {
    navigatepageNums[i] = startNum++;
    }
    } else if (endNum > pages) {
    endNum = pages;
    //最后navigatePages页
    for (int i = navigatePages - 1; i >= 0; i--) {
    navigatepageNums[i] = endNum--;
    }
    } else {
    //所有中间页
    for (int i = 0; i < navigatePages; i++) {
    navigatepageNums[i] = startNum++;
    }
    }
    }
    }

    /**
    * 计算前后页,第一页,最后一页
    */
    private void calcPage() {
    if (navigatepageNums != null && navigatepageNums.length > 0) {
    navigateFirstPage = navigatepageNums[0];
    navigateLastPage = navigatepageNums[navigatepageNums.length - 1];
    if (pageNum > 1) {
    prePage = pageNum - 1;
    }
    if (pageNum < pages) {
    nextPage = pageNum + 1;
    }
    }
    }

    /**
    * 判定页面边界
    */
    private void judgePageBoudary() {
    isFirstPage = pageNum == 1;
    isLastPage = pageNum == pages || pages == 0;;
    hasPreviousPage = pageNum > 1;
    hasNextPage = pageNum < pages;
    }

    public int getPageNum() {
    return pageNum;
    }

    public void setPageNum(int pageNum) {
    this.pageNum = pageNum;
    }

    public int getPageSize() {
    return pageSize;
    }

    public void setPageSize(int pageSize) {
    this.pageSize = pageSize;
    }

    public int getSize() {
    return size;
    }

    public void setSize(int size) {
    this.size = size;
    }

    public int getStartRow() {
    return startRow;
    }

    public void setStartRow(int startRow) {
    this.startRow = startRow;
    }

    public int getEndRow() {
    return endRow;
    }

    public void setEndRow(int endRow) {
    this.endRow = endRow;
    }

    public long getTotal() {
    return total;
    }

    public void setTotal(long total) {
    this.total = total;
    }

    public int getPages() {
    return pages;
    }

    public void setPages(int pages) {
    this.pages = pages;
    }

    public List<T> getList() {
    return list;
    }

    public void setList(List<T> list) {
    this.list = list;
    }

    @Deprecated
    // firstPage就是1, 此函数获取的是导航条上的第一页, 容易产生歧义
    public int getFirstPage() {
    return navigateFirstPage;
    }

    @Deprecated
    public void setFirstPage(int firstPage) {
    this.navigateFirstPage = firstPage;
    }

    public int getPrePage() {
    return prePage;
    }

    public void setPrePage(int prePage) {
    this.prePage = prePage;
    }

    public int getNextPage() {
    return nextPage;
    }

    public void setNextPage(int nextPage) {
    this.nextPage = nextPage;
    }

    @Deprecated
    // 请用getPages()来获取最后一页, 此函数获取的是导航条上的最后一页, 容易产生歧义.
    public int getLastPage() {
    return navigateLastPage;
    }

    @Deprecated
    public void setLastPage(int lastPage) {
    this.navigateLastPage = lastPage;
    }

    public boolean isIsFirstPage() {
    return isFirstPage;
    }

    public void setIsFirstPage(boolean isFirstPage) {
    this.isFirstPage = isFirstPage;
    }

    public boolean isIsLastPage() {
    return isLastPage;
    }

    public void setIsLastPage(boolean isLastPage) {
    this.isLastPage = isLastPage;
    }

    public boolean isHasPreviousPage() {
    return hasPreviousPage;
    }

    public void setHasPreviousPage(boolean hasPreviousPage) {
    this.hasPreviousPage = hasPreviousPage;
    }

    public boolean isHasNextPage() {
    return hasNextPage;
    }

    public void setHasNextPage(boolean hasNextPage) {
    this.hasNextPage = hasNextPage;
    }

    public int getNavigatePages() {
    return navigatePages;
    }

    public void setNavigatePages(int navigatePages) {
    this.navigatePages = navigatePages;
    }

    public int[] getNavigatepageNums() {
    return navigatepageNums;
    }

    public void setNavigatepageNums(int[] navigatepageNums) {
    this.navigatepageNums = navigatepageNums;
    }

    public int getNavigateFirstPage() {
    return navigateFirstPage;
    }

    public int getNavigateLastPage() {
    return navigateLastPage;
    }

    public void setNavigateFirstPage(int navigateFirstPage) {
    this.navigateFirstPage = navigateFirstPage;
    }

    public void setNavigateLastPage(int navigateLastPage) {
    this.navigateLastPage = navigateLastPage;
    }

    @Override
    public String toString() {
    final StringBuffer sb = new StringBuffer("PageInfo{");
    sb.append("pageNum=").append(pageNum);
    sb.append(", pageSize=").append(pageSize);
    sb.append(", size=").append(size);
    sb.append(", startRow=").append(startRow);
    sb.append(", endRow=").append(endRow);
    sb.append(", total=").append(total);
    sb.append(", pages=").append(pages);
    sb.append(", list=").append(list);
    sb.append(", prePage=").append(prePage);
    sb.append(", nextPage=").append(nextPage);
    sb.append(", isFirstPage=").append(isFirstPage);
    sb.append(", isLastPage=").append(isLastPage);
    sb.append(", hasPreviousPage=").append(hasPreviousPage);
    sb.append(", hasNextPage=").append(hasNextPage);
    sb.append(", navigatePages=").append(navigatePages);
    sb.append(", navigateFirstPage=").append(navigateFirstPage);
    sb.append(", navigateLastPage=").append(navigateLastPage);
    sb.append(", navigatepageNums=");
    if (navigatepageNums == null) sb.append("null");
    else {
    sb.append('[');
    for (int i = 0; i < navigatepageNums.length; ++i)
    sb.append(i == 0 ? "" : ", ").append(navigatepageNums[i]);
    sb.append(']');
    }
    sb.append('}');
    return sb.toString();
    }
    }

    --------------------- 

  • 相关阅读:
    matplotlib数据可视化之柱形图
    xpath排坑记
    Leetcode 100. 相同的树
    Leetcode 173. 二叉搜索树迭代器
    Leetcode 199. 二叉树的右视图
    Leetcode 102. 二叉树的层次遍历
    Leetcode 96. 不同的二叉搜索树
    Leetcode 700. 二叉搜索树中的搜索
    Leetcode 2. Add Two Numbers
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/ly570/p/10995940.html
Copyright © 2011-2022 走看看