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

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分页实现
# 分页
# 每页
# 首页
# 到第
# 末页
# 类中
# 升序
# 这一
# 首次
# 子类
# 下一页
# 上一页
# 管理系统
# 只需
# 尾页
# 自带
# 有两种
# 不带
# 较少
# 上页
相关文章:
高性能网站服务器配置指南:安全稳定与高效建站核心方案
建站之星安装后如何自定义网站颜色与字体?
如何通过FTP空间快速搭建安全高效网站?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何选择高性价比服务器搭建个人网站?
C++中引用和指针有什么区别?(代码说明)
盐城做公司网站,江苏电子版退休证办理流程?
Android使用GridView实现日历的简单功能
如何在局域网内绑定自建网站域名?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
微信小程序制作网站有哪些,微信小程序需要做网站吗?
如何在阿里云虚拟主机上快速搭建个人网站?
建站之星各版本价格是多少?
如何快速启动建站代理加盟业务?
建站之星备案是否影响网站上线时间?
焦点电影公司作品,电影焦点结局是什么?
行程制作网站有哪些,第三方机票电子行程单怎么开?
如何通过wdcp面板快速创建网站?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
建站之星会员如何解锁更多建站功能?
网站设计制作企业有哪些,抖音官网主页怎么设置?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?
建站之星图片链接生成指南:自助建站与智能设计教程
昆明高端网站制作公司,昆明公租房申请网上登录入口?
网站制作的步骤包括,正确网址格式怎么写?
Python路径拼接规范_跨平台处理说明【指导】
Java解压缩zip - 解压缩多个文件或文件夹实例
如何选择PHP开源工具快速搭建网站?
完全自定义免费建站平台:主题模板在线生成一站式服务
如何快速搭建高效WAP手机网站?
高端网站建设与定制开发一站式解决方案 中企动力
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
北京网站制作的公司有哪些,北京白云观官方网站?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
javascript中对象的定义、使用以及对象和原型链操作小结
如何高效配置IIS服务器搭建网站?
制作网站的模板软件,网站怎么建设?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何快速搭建自助建站会员专属系统?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
建站之星多图banner生成与模板自定义指南
如何在企业微信快速生成手机电脑官网?
如何选择香港主机高效搭建外贸独立站?
如何在Golang中指定模块版本_使用go.mod控制版本号
子杰智能建站系统|零代码开发与AI生成SEO优化指南
常州自助建站费用包含哪些项目?
*请认真填写需求信息,我们会在24小时内与您取得联系。