全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

springmvc 分页查询的简单实现示例代码

目前较常用的分页实现办法有两种:

1.每次翻页都修改SQL,向SQL传入相关参数去数据库实时查出该页的数据并显示。

2.查出数据库某张表的全部数据,再通过在业务逻辑里面进行处理去取得某些数据并显示。

对于数据量并不大的简单的管理系统而言,第一种实现方法相对来说容易使用较少的代码实现分页这一功能,本文也正是为大家介绍这种方法:

代码片段:

1,Page.java

package com.cm.contract.common; 
 
import org.apache.commons.lang.StringUtils; 
import org.apache.commons.lang.builder.ToStringBuilder; 
 
 
 
/**分页类 
 * @author FENGWEI 
 * @date 2016-5-23 
 */ 
public class Page implements java.io.Serializable{ 
   
  private static final long serialVersionUID = 1L; 
  //前一页 
  private Boolean hasPrePage; 
  //后一页 
  private Boolean hasNextPage; 
  //每页显示多少条:默认20条 
  private Long everyPage = 20L; 
  //总页数 
  private Long totalPage; 
  //当前第多少页:默认第1页 
  private Long currentPage = 1L; 
  //开始下标 
  private Long beginIndex; 
  //结束下标 
  private Long endinIndex; 
  //总共多少条 
  private Long totalCount;   
  //排序列名 
  private String sortName;   
  //排序状态 
  private String sortState;   
  //排序信息 
  private String sortInfo; 
  //是否排序 
  private Boolean sort = false; 
  private String defaultInfo = " "; 
   
   
   
  public String getDefaultInfo() { 
    return defaultInfo; 
  } 
 
  public void setDefaultInfo(String defaultInfo) { 
    this.defaultInfo = defaultInfo; 
  } 
 
  public String getSortInfo() { 
    return sortInfo; 
  } 
 
  public void setSortInfo(String sortInfo) { 
    this.sortInfo = sortInfo; 
  } 
 
  public String getSortName() { 
    return sortName; 
  } 
 
  public void setSortName(String sortName) { 
    setPageSortState(sortName);    
  } 
 
  public String getSortState() { 
    return sortState; 
  } 
 
  public void setSortState(String sortState) { 
    this.sortState = sortState; 
  } 
 
   
  public Page() { 
  } 
 
  /** 
   * 常用,用于计算分页 
   * */ 
  public Page(Long totalRecords){    
    this.totalCount = totalRecords; 
    setTotalPage(getTotalPage(totalRecords));    
  } 
   
  /** 
   * 设置每页显示多少条时使用 
   * */ 
  public Page(Long everyPage,Long totalRecords){  
    this.everyPage = everyPage; 
    this.totalCount = totalRecords; 
    setTotalPage(getTotalPage(totalRecords));    
  } 
   
  /** 
   * @param state  状态码 
   * @param value  到第多少页或者设置每页显示多少条或者为排序列名 
   */ 
  public void pageState(int index,String value) {         
    sort = false; 
    switch (index) { 
    case 0 :setEveryPage(Long.parseLong(value));break; 
    case 1 :first();break; 
    case 2: previous();break; 
    case 3: next();break; 
    case 4: last();break; 
    case 5: sort = true;sort(value);break; 
    case 6 ://到指定第多少页 
      setCurrentPage(Long.parseLong(value)); 
      break;      
    } 
  } 
 
  /** 
   * 最前一页 
   */ 
  private void first() { 
    currentPage = 1L; 
  } 
 
  private void previous() { 
    currentPage--; 
  } 
 
  private void next() { 
    currentPage++; 
  } 
 
  private void last() { 
    currentPage = totalPage; 
  } 
 
  private void sort(String sortName) {     
    //设置排序状态 
    setPageSortState(sortName);    
  } 
     
   
   
  /** 
   * 计算总页数 
   * */ 
  private Long getTotalPage(Long totalRecords) { 
     Long totalPage = 0L;   
     everyPage = everyPage == null ? 10L : everyPage; 
     if (totalRecords % everyPage == 0) 
      totalPage = totalRecords / everyPage; 
     else { 
      totalPage = totalRecords / everyPage + 1; 
     } 
     return totalPage; 
  }   
   
 
  public Long getBeginIndex() { 
    this.beginIndex = (currentPage - 1) * everyPage; 
    return this.beginIndex; 
  } 
 
  public void setBeginIndex(Long beginIndex) { 
    this.beginIndex = beginIndex; 
  } 
 
  public Long getCurrentPage() { 
    this.currentPage = currentPage == 0 ? 1 : currentPage; 
    return this.currentPage; 
  } 
 
  public void setCurrentPage(Long currentPage) { 
    if(0 == currentPage){ 
      currentPage = 1L; 
    } 
    this.currentPage = currentPage; 
  } 
 
  public Long getEveryPage() { 
    this.everyPage = everyPage == 0 ? 10 : everyPage; 
    return this.everyPage; 
  } 
 
  public void setEveryPage(Long everyPage) {    
    this.everyPage = everyPage; 
  } 
 
  public Boolean getHasNextPage() { 
    this.hasNextPage = (currentPage != totalPage) && (totalPage != 0); 
    return this.hasNextPage; 
  } 
 
  public void setHasNextPage(Boolean hasNextPage) { 
    this.hasNextPage = hasNextPage; 
  } 
 
  public Boolean getHasPrePage() { 
    this.hasPrePage = currentPage != 1; 
    return this.hasPrePage; 
  } 
 
  public void setHasPrePage(Boolean hasPrePage) { 
    this.hasPrePage = hasPrePage; 
  } 
 
  public Long getTotalPage() { 
    return this.totalPage; 
  } 
 
  public void setTotalPage(Long totalPage) { 
    if(this.currentPage > totalPage){ 
      this.currentPage = totalPage; 
    } 
    this.totalPage = totalPage; 
  } 
 
  public Long getTotalCount() { 
    return this.totalCount; 
  } 
 
  public void setTotalCount(Long totalCount) { 
    setTotalPage(getTotalPage(totalCount));  
    this.totalCount = totalCount; 
  } 
 
  @Override 
  public String toString() { 
    return ToStringBuilder.reflectionToString(this); 
  } 
   
  /** 
   * 设置排序状态 
   * */ 
  private void setPageSortState(String newPageSortName){    
    //判断之前的排序字段是否为空 
    if(StringUtils.isEmpty(sortName)){ 
      //默认排序为升序 
      this.sortState = PageUtil.ASC;    
      this.sortInfo = PageUtil.PAGE_ASC;            
    }else{ 
      if(StringUtils.equalsIgnoreCase(newPageSortName, sortName)){ 
        //判断sortState排序状态值 
        if(StringUtils.equalsIgnoreCase(sortState, PageUtil.ASC)){ 
          this.sortState = PageUtil.DESC; 
          this.sortInfo = PageUtil.PAGE_DESC;                
        }else{ 
          this.sortState = PageUtil.ASC; 
          this.sortInfo = PageUtil.PAGE_ASC;          
        }         
      }else{ 
        //默认 
        this.sortState = PageUtil.ASC;    
        this.sortInfo = PageUtil.PAGE_ASC; 
      } 
    } 
    sortName = newPageSortName.toLowerCase();       
  } 
 
  public Boolean isSort() { 
    return sort; 
  } 
 
  public void setSort(Boolean sort) { 
    this.sort = sort; 
  } 
 
 
  public Long getEndinIndex() { 
    this.endinIndex = (currentPage) * everyPage; 
    return endinIndex; 
  } 
 
  public void setEndinIndex(Long endinIndex) { 
    this.endinIndex = endinIndex; 
  }   
} 

2.PageState.java

package com.cm.contract.common; 
 
import org.apache.commons.lang.StringUtils; 
 
 
 
 
/**分页状态类 
 * @author FENGWEI 
 * @date 2016-5-23 
 */ 
public enum PageState { 
   
  /** 
   * 设置每页显示多少条 
   * */ 
  SETPAGE, 
  /** 
   * 首页 
   * */ 
  FIRST,  
  /** 
   * 向前一页 
   * */ 
  PREVIOUS,  
  /** 
   * 向后一页 
   * */ 
  NEXT,  
  /** 
   * 末页 
   * */ 
  LAST,  
  /** 
   * 排序 
   * */ 
  SORT, 
  /** 
   * 到第多少页 
   * */ 
  GOPAGE; 
 
   
  /** 
   * @param value 索引名称 
   * @return 返回索引下标 
   */ 
  public static int getOrdinal(String value) { 
    int index = -1; 
    if (StringUtils.isEmpty(value)) { 
      return index; 
    } 
    String newValue = StringUtils.trim(value).toUpperCase(); 
    try { 
      index = valueOf(newValue).ordinal(); 
    } catch (IllegalArgumentException e) {} 
    return index; 
  } 
} 

3.PageUtil.java

/** 
 * 分页工具类 
 * @author FENGWEI 
 * @date 2016-5-23 
 */ 
public class PageUtil { 
   
  public static final String ASC = "asc"; 
  public static final String DESC = "desc"; 
  public static final String PAGE_DESC = "↓"; 
  public static final String PAGE_ASC = "↑"; 
  public static final String PAGE_NULL = " ";  
  public static final String SESSION_PAGE_KEY = "page";   
   
   
  /** 
   * 初始化分页类 
   * @param initPageSql 未分页的查询SQL 
   * @param totalCount  总行数 
   * @param index    分页状态 
   * @param value    只有在设置每页显示多少条时,值不会NULL,其它为NULL 
   */ 
  public static Page inintPage(Long totalCount,Integer index,String value,Page sessionPage){  
    Page page = null; 
    if(index < 0){ 
       page = new Page(totalCount); 
    }else{ 
       /**每页显示多少条*/ 
       Long everPage = null == value ? 10 : Long.parseLong(value); 
       /**获取Session中的分页类,方便保存页面分页状态*/ 
       page = sessionPage;        
       page.setEveryPage(everPage); 
       page.setTotalCount(totalCount);       
    }   
    return page;     
  } 
   
   
 
   
  /** 
   * 当页点击:首页,前一页,后一页,末页,排序,到第多少页时进行分页操作 
   * @param index 分页状态 
   * @param value 排序字段名或者到第多少页 
   */ 
  public static Page execPage(int index,String value,Page sessionPage){  
    Page page = sessionPage;       
    /**调用方法进行分页计算*/ 
    page.pageState(index,value);     
    return page;     
  } 
 
} 

4.DefaultController.java  此部分可以灵活使用

package com.cm.contract.common; 
 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 
 
import org.springframework.web.bind.annotation.ModelAttribute; 
 
/** 
 * 提取公用的request和response Title:DefaultController Descrption: 
 * 
 * @author FENGWEI 
 * @date 2016-5-6下午3:30:32 
 */ 
public class DefaultController { 
 
  /** 
   * oracel的三层分页语句 子类在展现数据前,进行分页计算! 
   * 
   * @param querySql 
   *      查询的SQL语句,未进行分页 
   * @param totalCount 
   *      根据查询SQL获取的总条数 
   * @param columnNameDescOrAsc 
   *      列名+排序方式 : ID DESC or ASC 
   */ 
  protected Page executePage(HttpServletRequest request, Long totalCount) { 
    if (null == totalCount) { 
      totalCount = 0L; 
    } 
    /** 页面状态,这个状态是分页自带的,与业务无关 */ 
    String pageAction = request.getParameter("pageAction"); 
    String value = request.getParameter("pageKey"); 
 
    /** 获取下标判断分页状态 */ 
    int index = PageState.getOrdinal(pageAction); 
 
    Page page = null; 
    /** 
     * index < 1 只有二种状态 1 当首次调用时,分页状态类中没有值为 NULL 返回 -1 2 当页面设置每页显示多少条: 
     * index=0,当每页显示多少条时,分页类要重新计算 
     * */ 
    Page sessionPage = getPage(request); 
 
    if (index < 1) { 
      page = PageUtil.inintPage(totalCount, index, value, sessionPage); 
    } else { 
      page = PageUtil.execPage(index, value, sessionPage); 
    } 
    setSession(request, page); 
    return page; 
  } 
 
  private Page getPage(HttpServletRequest request) { 
    Page page = (Page) request.getSession().getAttribute( 
        PageUtil.SESSION_PAGE_KEY); 
    if (page == null) { 
      page = new Page(); 
    } 
    return page; 
  } 
 
  private void setSession(HttpServletRequest request, Page page) { 
    request.getSession().setAttribute(PageUtil.SESSION_PAGE_KEY, page); 
  } 
} 

使用方法:

5,Controller.java

/** 
   * model 添加的分页条件 
   * executePage 方法写在工具类中 
   * @param model 
   */ 
@Controller 
public class CMLogController extends DefaultController { 
@RequestMapping("index.do") 
  public ModelAndView userInto(ModelMap model, String username) { 
    nameStr = username; 
    model.addAttribute("username", nameStr); 
    // 分页数 
    Long totalCount = logService.pageCounts(model); 
    // 分页显示 
    Page page = executePage(request, totalCount); 
    if (page.isSort()) { 
      model.put("orderName", page.getSortName()); 
      model.put("descAsc", page.getSortState()); 
    } else { 
      model.put("orderName", "logtime"); 
      model.put("descAsc", "desc"); 
    } 
    model.put("startIndex", page.getBeginIndex()); 
    model.put("endIndex", page.getEndinIndex()); 
    ModelAndView mv = new ModelAndView(); 
    // 分页查询 
    logList = logService.pageList(model); 
    mv.addObject("logList", logList); 
    mv.setViewName("/jsp/log"); 
    return mv; 
  }} 

6.maybatis中几条查询语句

//分页查询 
<select id="pageList" parameterType="map" resultMap="BaseResultMap">   
     
    select ttt.* from(select tt.*,rownum rn from(select * from CM_LOG 
    <where>      
      <if test="username != null and username != ''"> 
        <!--  
         特别提醒一下, $只是字符串拼接, 所以要特别小心sql注入问题。 
         在开发时使用: $,方便调试sql,发布时使用: # 
        --> 
        and username like '%${username}%'           
      </if> 
       <if test="type != null and type != ''"> 
        <!--  
         特别提醒一下, $只是字符串拼接, 所以要特别小心sql注入问题。 
         在开发时使用: $,方便调试sql,发布时使用: # 
        --> 
        AND TYPE = #{type,jdbcType=VARCHAR}    
      </if> 
     </where>  
     order by ${orderName} ${descAsc} )tt)ttt 
     <where>  
      <if test="startIndex != null and startIndex != ''"> 
        rn > ${startIndex}           
      </if>  
      <if test="endIndex != null and endIndex != ''">        
         <![CDATA[ and rn <= ${endIndex} ]]>                
      </if>   
     </where>      
</select> 
// 分页数 
 <select id="pageCounts" parameterType="map" resultType="long">   
  select count(*) from CM_LOG  
  <where>  
  <if test="username != null and username != ''"> 
    and username like '%${username}%'          
  </if>  
  </where>  
</select> 

7.前台页面index.jsp

//只需在页面布局添加该div 
  //username 为条件  
  // <jsp:param name="url" value="/log/index.do?"/>    不带条件的方式 问号必须存在 
<body > 
  <div align="right" style="height: 20"> 
      <jsp:include page="/jsp/page.jsp"> 
          <jsp:param name="url" value="/log/index.do?username=${username }"/>     
 
        </jsp:include> 
    </div> 
 
    </body > 

8,引用的Page.jsp

  <%@ page language="java" contentType="text/html; charset=UTF-8" 
  pageEncoding="UTF-8"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<c:set var="page" value="${sessionScope.page}" /> 
<c:set var="path" value="${pageContext.request.contextPath}" /> 
<c:set var="url" value="${param.url}" /> 
<c:set var="urlParams" value="${param.urlParams}" /> 
<c:set var="pathurl" value="${path}/${url}" /> 
<tr> 
  <td colspan="5"> 
  ${urlParams } 
    共${page.totalCount}条记录 共${page.totalPage}页 每页显示${page.everyPage}条 
    当前第${page.currentPage}页  
    <c:choose> 
      <c:when test="${page.hasPrePage eq false}"> 
        <<首页 <上页  
      </c:when> 
      <c:otherwise> 
        <a href="${pathurl}&pageAction=first${urlParams}"><<首页 </a>  
        <a href="${pathurl}&pageAction=previous${urlParams}" /><上一页</a> 
      </c:otherwise> 
    </c:choose> 
     ||  
    <c:choose> 
      <c:when test="${page.hasNextPage eq false}"> 
         下页> 尾页>> 
      </c:when> 
      <c:otherwise> 
        <a href="${pathurl}&pageAction=next${urlParams}">下一页> </a>  
        <a href="${pathurl}&pageAction=last${urlParams}">末页>></a> 
      </c:otherwise> 
    </c:choose> 
      
    <SELECT name="indexChange" id="indexChange" 
      onchange="getCurrentPage(this.value);"> 
      <c:forEach var="index" begin="1" end="${page.totalPage}" step="1"> 
        <option value="${index}" ${page.currentPage eq index ? "selected" : ""}> 
          第${index}页 
        </option> 
      </c:forEach> 
    </SELECT> 
      
    每页显示:<select name="everyPage" id="everyPage" onchange="setEveryPage(this.value);"> 
          <c:forEach var="pageCount" begin="5" end="${page.totalCount}" step="5">             
            <option value="${pageCount}" ${page.everyPage eq pageCount ? "selected" : ""}> 
              ${pageCount}条 
            </option> 
          </c:forEach> 
        </select> 
  </td> 
</tr> 
<div style='display: none'> 
  <a class=listlink id="indexPageHref" href='#'></a> 
</div> 
<script> 
function getCurrentPage(index){  
  var a = document.getElementById("indexPageHref");   
  a.href = '${pathurl}&pageAction=gopage&pageKey='+index+'${urlParams}';     
  a.setAttribute("onclick",'');      
  a.click("return false");   
} 
function setEveryPage(everyPage){   
  var a = document.getElementById("indexPageHref"); 
  var currentPage = document.getElementById('indexChange').value; 
  a.href = '${pathurl}&pageAction=setpage&pageKey='+everyPage+'${urlParams}';     
  a.setAttribute("onclick",'');      
  a.click("return false");   
} 
function sortPage(sortName){   
  var a = document.getElementById("indexPageHref");   
  a.href = '${pathurl}&pageAction=sort&pageKey='+sortName+'${urlParams}';    
  a.setAttribute("onclick",'');    
  a.click("return false");   
} 
</script> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# springmvc分页查询  # springmvc做分页查询  # SpringMVC+Mybatis实现的Mysql分页数据查询的示例  # springmvc+mybatis 做分页sql 语句实例代码  # SpringMVC4 + MyBatis3 + SQL Server 2014整合教程(含增删改查分  # AJAX +SpringMVC 实现bootstrap模态框的分页查询功能  # springmvc4+hibernate4分页查询功能实现  # SpringMvc+Mybatis+Pagehelper分页详解  # SpringMVC+MyBatis分页(最新)  # 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询  # Java简单实现SpringMVC+MyBatis分页插件  # Springmvc应用Mongodb分页实现  # 分页  # 每页  # 首页  # 到第  # 末页  # 类中  # 升序  # 这一  # 首次  # 子类  # 下一页  # 上一页  # 管理系统  # 只需  # 尾页  # 自带  # 有两种  # 不带  # 较少  # 上页 


相关文章: 香港服务器租用每月最低只需15元?  广州顶尖建站服务:企业官网建设与SEO优化一体化方案  高防服务器:AI智能防御DDoS攻击与数据安全保障  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  建站之星在线客服如何快速接入解答?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  网站制作的步骤包括,正确网址格式怎么写?  如何在Golang中指定模块版本_使用go.mod控制版本号  企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?  弹幕视频网站制作教程下载,弹幕视频网站是什么意思?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  PHP 500报错的快速解决方法  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  定制建站平台哪家好?企业官网搭建与快速建站方案推荐  如何获取免费开源的自助建站系统源码?  建站之星下载版如何获取与安装?  如何在自有机房高效搭建专业网站?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  如何在云主机上快速搭建多站点网站?  如何在香港服务器上快速搭建免备案网站?  如何生成腾讯云建站专用兑换码?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  网站好制作吗知乎,网站开发好学吗?有什么技巧?  C++时间戳转换成日期时间的步骤和示例代码  如何选择PHP开源工具快速搭建网站?  建站之星Pro快速搭建教程:模板选择与功能配置指南  如何用低价快速搭建高质量网站?  如何快速搭建二级域名独立网站?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  如何用AWS免费套餐快速搭建高效网站?  制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?  Android使用GridView实现日历的简单功能  如何选择最佳自助建站系统?快速指南解析优劣  如何高效利用亚马逊云主机搭建企业网站?  建站之星导航配置指南:自助建站与SEO优化全解析  建站之星安装需要哪些步骤及注意事项?  济南专业网站制作公司,济南信息工程学校怎么样?  外贸公司网站制作哪家好,maersk船公司官网?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?  建站之星会员如何解锁更多建站功能?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  三星网站视频制作教程下载,三星w23网页如何全屏?  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  制作公司内部网站有哪些,内网如何建网站?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。