`
GoTiger
  • 浏览: 10039 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

数据库分页之前之后的处理

    博客分类:
  • Java
 
阅读更多
/**
 * @author sunbai email:85846536@163.com
 * @date   2012-1-14 && 上午11:01:40
 */
package com.gangyi.util;
import java.util.ArrayList;
import java.util.List;

import org.springframework.context.annotation.Scope;

import com.gangyi.crm.vo.PageVo;


/**
 * 分页算法处理类
 * @author sunbai email:85846536@163.com
 * @date   2012-1-14 && 上午11:01:40
 */
@Scope("prototype")
public class PageUtil {
	//每页行数
	private int rows;
	//分页查询起始序列
	private int limit;
	//首页A标签
	private String fistPageHtml;
	//上一页A标签
	private String upPageHtml;
	//下一页A标签
	private String nextPageHtml;
	//末页A标签
	private String lastPageHtml;
	//总记录数
	private int recordCount;
	//总页数
	private int allPage;
	//当前页
	private int currPage;
	// 分页带页码 ,最大页签显示数
	private final int CUTPAGE_MAX_PAGE = 6;
	// 分页带页码,多少页进行折叠
	private final int CUTPAGE_LOOP_PAGE = 3;
	
	private void setRows(int rows) {
		this.rows = rows;
	}
	private void setLimit(int limit) {
		this.limit = limit;
	}
	private void setFistPageHtml(String fistPageHtml) {
		this.fistPageHtml = fistPageHtml;
	}
	private void setUpPageHtml(String upPageHtml) {
		this.upPageHtml = upPageHtml;
	}
	private void setNextPageHtml(String nextPageHtml) {
		this.nextPageHtml = nextPageHtml;
	}
	private void setLastPageHtml(String lastPageHtml) {
		this.lastPageHtml = lastPageHtml;
	}
	private void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}
	private void setAllPage(int allPage) {
		this.allPage = allPage;
	}
	private void setCurrPage(int currPage) {
		this.currPage = currPage;
	}
	/**
	 * 获得每页行数
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午03:53:50
	 * @return
	 */
	public int getRows() {
		return rows;
	}
	/**
	 * 获得其实页序列
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午03:54:01
	 * @return
	 */
	public int getLimit() {
		return limit;
	}
	/**
	 * 获得首页a标签
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午03:57:21
	 * @return
	 */
	public String getFistPageHtml() {
		return fistPageHtml;
	}
	/**
	 * 获得上一页a标签
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午03:57:32
	 * @return
	 */
	public String getUpPageHtml() {
		return upPageHtml;
	}
	/**
	 * 获得下一页a标签
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午03:57:44
	 * @return
	 */
	public String getNextPageHtml() {
		return nextPageHtml;
	}
	/**
	 * 获得末页a标签
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午03:57:55
	 * @return
	 */
	public String getLastPageHtml() {
		return lastPageHtml;
	}
	/**
	 * 获得总数据记录数
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午03:58:15
	 * @return
	 */
	public int getRecordCount() {
		return recordCount;
	}
	/**
	 * 获得总页数
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午03:58:25
	 * @return
	 */
	public int getAllPage() {
		return allPage;
	}
	/**
	 * 获得当前页
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午03:59:00
	 * @return
	 */
	public int getCurrPage() {
		return currPage;
	}
	/**
	 * 传入需要的页码,和每页显示的行数算出mysql中分页的开始偏移数据,方便输入到sql语句中查询
	 * 如getLimtAndLines(10,10)
	 * 返回map
	 * map.get("limit") 等于90
	 * map.ger("rows") 等于10
	 * 那么在sql语句中即是:select * from table limit 90,10
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 上午11:06:34
	 * @param page 当前页
	 * @param lines 每页行数
	 * @return
	 */
	public Boolean getLimtAndLines(int page,int lines){
		try
        {
			if(page < 1){
				page = 1;
			}
			if(lines < 1){
				lines = 15;
			}
			this.setLimit((page - 1) * lines);
			this.setRows(lines);
        }
        catch (Exception e)
        {
        	return false;
        }

		
		return true;
	}
	/**
	 * 生成页面分页代码主方法
	 * 根据总条数,以及ACTION路径、当前页和每页显示行数,计算出上一页,下一页等数据,并生成HTML中的A标签或者数字供前台调用
	 * 返回值是true 或  false
	 * 当为false时 代表没有数据,也无需进行计算,页面直接判断是否为NULL显示与否即可
	 * 其余方法下取值如下
	 * PageUtil.getFistPageHtml() 获取首页标签
	 * PageUtil.getUpPageHtml() 获取上一页标签
	 * PageUtil.getNextPageHtml() 获取下一页标签
	 * PageUtil.getLastPageHtml() 获取末页标签
	 * PageUtil.getRecordCount() 获取总记录数
	 * PageUtil.getAllPage() 获取总页数
	 * PageUtil.getCurrPage() 获取当前页
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午02:56:14
	 * @param allCount 总记录数
	 * @param actionUrl ACTION路径
	 * @param lines	每页行数
	 * @param page 第几页
	 * @return
	 */
	public Boolean getPageHtml(int allCount,String actionUrl,int lines,int page){
		try{
			//判断是否有记录
			if( allCount == 0){
				return false;
			}
			//判断当前页数
			if( page < 1){
				page = 1;
			}
			//总记录数
			int recordCount = allCount;
			//总页数
			int allPage = recordCount % lines == 0 ? recordCount / lines : recordCount / lines + 1;
			//当前页
			int currPage = page;
			//首页
			int firstPage = 1;
			//末页
			int lastPage = allPage;
			//上一页
			int upPage = currPage - 1;
			//下一页
			int nextPage = currPage + 1;
			//设置分页VO对象
			PageVo pageVo = new PageVo();
			pageVo.setRecordCount(recordCount);
			pageVo.setAllPage(allPage);
			pageVo.setCurrPage(currPage);
			pageVo.setFirstPage(firstPage);
			pageVo.setLastPage(allPage);
			pageVo.setUpPage(upPage > firstPage ? upPage : firstPage);
			pageVo.setNextPage(nextPage < lastPage ? nextPage : lastPage);
			//调用生成页面的方法
			this.toHtmlFromPageMap(pageVo,actionUrl);
		}catch (Exception e) {
			return false;
		}
		return true;
		
	}
	/**
	 * 生成页面分页代码,供主方法调用
	 * 根据分页VO以及ACTION路径、生成HTML中的A标签或者数字供前台调用
	 * 其取值如下
	 * PageUtil.getFistPageHtml() 获取首页标签
	 * PageUtil.getUpPageHtml() 获取上一页标签
	 * PageUtil.getNextPageHtml() 获取下一页标签
	 * PageUtil.getLastPageHtml() 获取末页标签
	 * PageUtil.getRecordCount() 获取总记录数
	 * PageUtil.getAllPage() 获取总页数
	 * PageUtil.getCurrPage() 获取当前页
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午03:04:25
	 * @param pageVo 分页VO
	 * @param actionUrl ACTION路径
	 * @return
	 */
	private void toHtmlFromPageMap(PageVo pageVo,String actionUrl){
		this.setFistPageHtml("<a href= <%=request.getContextPath()%>"+actionUrl+"?page="+pageVo.getFirstPage()+">首页</a>");
		this.setUpPageHtml("<a href= <%=request.getContextPath()%>"+actionUrl+"?page="+pageVo.getUpPage()+">上一页</a>");
		this.setNextPageHtml("<a href= <%=request.getContextPath()%>"+actionUrl+"?page="+pageVo.getNextPage()+">下一页</a>");
		this.setLastPageHtml("<a href= <%=request.getContextPath()%>"+actionUrl+"?page="+pageVo.getLastPage()+">末页</a>");
		//总记录数
		this.setRecordCount(pageVo.getRecordCount());
		//总页数
		this.setAllPage(pageVo.getAllPage());
		//当前页
		this.setCurrPage(pageVo.getCurrPage());
	}
	/**
	 * 根据总页数获得当前页面page页码集合
	 * @author sunbai email:85846536@163.com
	 * @date   2012-1-14 && 下午04:16:51
	 * @param allpage 总页数
	 * @param currpage	当前页
	 * @return
	 */
	public List<String> getPageNumbersList(int allpage, int currpage) {
		// pageye 存放页面,页码集合
		List<String> pageye = new ArrayList<String>();
		// 需要展示的标签页数小于展示页数常量
		if (allpage <= CUTPAGE_MAX_PAGE)
			for (int i = 1; i <= allpage; i++)
				pageye.add(String.valueOf(i));
		// 需要展示的标签页数大于展示页数常量
		if (allpage > CUTPAGE_MAX_PAGE) {
			// 当前页小于展示也数常量
			if (currpage <=  CUTPAGE_LOOP_PAGE)
				for (int i = 1; i <= CUTPAGE_MAX_PAGE; i++)

					pageye.add(String.valueOf(i));
			// 当前页大于展示也数常量
			if (currpage >  CUTPAGE_LOOP_PAGE)
				for (int i = currpage - CUTPAGE_LOOP_PAGE; i <= (currpage
						+ CUTPAGE_LOOP_PAGE - 1 > allpage ? allpage : currpage
						+ CUTPAGE_LOOP_PAGE - 1); i++)
					pageye.add(String.valueOf(i));
		}
		return pageye;
	}
}

分享到:
评论

相关推荐

    数据库分页查询语句

    ### 数据库分页查询语句 #### 概述 在处理大量数据时,为了提高用户体验并减轻服务器压力,我们通常采用分页的方式展示数据。不同的数据库管理系统(DBMS)提供了各自的方法来实现分页功能。本文将详细介绍Oracle...

    mybatis插件分页测试

    MyBatis允许开发者创建自定义插件,这些插件可以在执行特定的SQL操作之前或之后进行拦截,例如:插入、更新、删除和查询等。通过实现Interceptor接口并重写intercept方法,我们可以在其中添加分页逻辑。 在"mybatis...

    mybatis分页拦截器

    分页拦截器就是在执行SQL之前或之后,对SQL语句进行修改,添加必要的分页条件,从而实现分页查询。 下面我们将详细探讨MyBatis分页拦截器的实现原理: 1. **拦截器接口**:在MyBatis中,所有的拦截器都需要实现`...

    bs_paginationmybatis分页插件包.zip

    分页插件主要通过动态代理的方式,对MyBatis的Executor执行器进行拦截,然后在执行SQL之前自动加上分页语句,执行之后再去除分页参数,从而实现对原始SQL的无感知分页。在数据库层面,插件会根据不同的数据库方言...

    使用LInq分页,超简便

    `AsQueryable()`方法将数据库集合转换为可查询对象,之后我们可以像处理任何其他LINQ查询一样使用`Skip()`和`Take()`。最后,`ToList()`方法执行查询并返回结果列表。 在实际应用中,我们还需要考虑总页数的计算。...

    Java分页Java分页Java分页

    1. **数据库分页** - **SQL分页**: 在SQL查询中,可以使用`LIMIT`和`OFFSET`(在MySQL中)或`FETCH NEXT`和`OFFSET`(在SQL Server中)来实现分页。例如,获取第2页,每页5条数据的SQL可能如下: ```sql SELECT *...

    MyBatis拦截器分页

    在MyBatis框架中,拦截器扮演着动态代理的角色,允许我们在执行SQL之前或之后进行额外的操作,比如统计、日志记录或者在本例中的分页处理。下面我们将详细探讨MyBatis拦截器的工作原理以及如何实现分页功能。 首先...

    GridView LINQ TO SQL 高效分页

    通过在查询语句中添加`Skip()`和`Take()`方法,可以跳过前n条数据(n为当前页之前页数乘以每页记录数),然后获取m条数据(m为每页记录数),实现高效分页。 例如,假设我们有一个名为`Students`的表,我们可以这样...

    分页代码Oracle

    总结来说,Oracle数据库中的分页代码实现主要涉及到SQL查询的编写,以及在Java后端如何处理这些查询。理解分页的基本原理和Oracle提供的函数,结合实际编程环境,可以有效地实现高效、灵活的分页功能。对于初学者而...

    JAVA开发WEB分页封装办法实现

    这一步可以在获取分页数据之前或之后完成,取决于数据库是否支持高效的统计方法。 4. **封装结果**:将查询到的数据和分页信息放入`Page`对象中,然后返回给前端。 ```java List&lt;T&gt; dataList = new ArrayList(); ...

    老二牛车在Oracle数据库上构建JAVA应用程序二理论课.pdf

    - 触发器功能:在特定操作(如INSERT或UPDATE)之前或之后自动执行,如自动生成stuID列的值。 - 禁止操作:触发器可以防止对特定字段进行更新操作,例如禁止更新stuID列。 ### 2. 分页操作的实现 #### 2.1 使用...

    oracle 分页语句

    在Oracle数据库中,实现分页查询是常见的需求之一。通过合理的分页查询可以提高数据检索的效率,优化用户体验。本文将详细介绍一个特定的Oracle分页查询语句:“`select * from (select a.*,rownum rn from (select ...

    mybatis分页插件

    这个插件能够自动处理SQL语句,添加必要的分页条件,从而避免手动编写繁琐的分页代码。下面我们将详细探讨MyBatis分页插件的工作原理、如何配置以及它与Spring的整合。 首先,MyBatis分页插件的核心是PageHelper,...

    通用ORACLE存储过程实现分页和查询

    在大数据量的数据库应用中,分页查询是必不可少的,因为它能够有效地处理和展示结果,避免一次性加载大量数据导致性能下降。本篇将详细介绍如何在Oracle中使用存储过程实现分页查询。 首先,我们需要了解分页的基本...

    Mybatis学习- 拦截器-实现分页

    在Mybatis框架中,拦截器(Interceptor)是一个强大的工具,它可以让我们在Mybatis执行SQL之前或之后做一些额外的操作,比如日志记录、权限检查、事务管理等。在本主题中,我们将深入探讨如何利用Mybatis的拦截器...

    mybatis拦截器分页

    MyBatis 拦截器是 MyBatis 框架中的一个重要组成部分,它允许开发者在执行 SQL 映射语句之前或之后插入自定义的行为。分页是 Web 应用程序中常见的需求,用于限制返回数据的数量,提高用户体验并减轻数据库负载。将...

    pagerhelper分页插件.pdf

    在代码中使用PageHelper,通常是在查询之前调用`PageHelper.startPage(int pageNum, int pageSize)`方法,之后的MyBatis SQL查询将自动完成分页处理。例如,在Spring MVC中,可以在Controller层的方法中使用...

    spring+springMVC+mybatis拦截器分页 源码

    SpringMVC中的拦截器(Interceptor)扮演着关键角色,它可以在请求被控制器处理之前或之后执行自定义逻辑。例如,拦截器可以用来实现登录验证、记录日志、性能监控等功能。在"spring+springMVC+mybatis拦截器分页"的...

    分页工具

    - 前向和后向链接优化:保存之前和之后页面的信息,以便快速导航。 - 分页缓存:对常用或热门页面进行缓存,减少数据库查询。 6. **用户体验**: - 显示页码范围:让用户知道他们正在查看的数据范围,以及是否...

    mybatis 自定义分页插件.rar

    拦截器是MyBatis动态代理机制的一部分,它允许我们在执行SQL语句之前或之后插入一些额外的操作。在分页插件的场景下,我们可以利用拦截器在执行查询前计算页码和每页大小,然后动态修改原始的SQL语句,使其包含分页...

Global site tag (gtag.js) - Google Analytics