ThreadLocal经典分页

package com.netease.live.admin.util;

import com.netease.live.common.util.Constant;

/**
 *
 * @author bjliuzezhou
 * @description 使用threadLocal 封装分页所必需传的参数
 * @date 2016年7月1日
 */
public class SystemContext {
	//当前第几页
	private static ThreadLocal<Integer> currentPage = new ThreadLocal<Integer>();
	//总共的页数
	private static ThreadLocal<Integer> totalPages = new ThreadLocal<Integer>();
	//起始数据位置
	private static ThreadLocal<Integer> offSet = new ThreadLocal<Integer>();
	//总记录的条数
	private static ThreadLocal<Integer> recordCount = new ThreadLocal<Integer>();
	//每页显示数
	private static ThreadLocal<Integer> pageSize = new ThreadLocal<Integer>(); 

    /*
  	 * currentPage :get、set、remove
	 */
	public static int getCurrentPage(){
		Integer cp = currentPage.get();
		if(cp == null){
			return 0;
		}
		return cp;
	}

	public static void setCurrentPage(int currentPage) {

		int validPage = currentPage > 0 ? currentPage : 1;
		validPage = validPage < getTotalPages() ? validPage : getTotalPages();
		SystemContext.currentPage.set(validPage);

	}
	public static void removeCurrentPage(){
		currentPage.remove();
	}

	/*
	 * totalPages :get、set、remove
	 */
	public static int getTotalPages() {
	    Integer tp = totalPages.get();
	    if (tp == null) {
	        return 0;
	    }
	    return tp;
	}  

	public static void calTotalPages() {  

		int totalPages = (getRecordCount() + getPageSize() -1) / getPageSize();
	    SystemContext.totalPages.set(totalPages);
	}  

	public static void removeTotalPages(){
	    totalPages.remove();
	}  

	/*
	 * offset :get、set、remove
	 */
	public static int getOffSet() {
	    Integer os =offSet.get();
	    if (os == null) {
	        return 0;
	    }
	    return os;
	}  

	public static void calOffSet() {
		int offset = (getCurrentPage() - 1) * getPageSize();
		int validOffSet = offset > 0 ? offset : 0;
		SystemContext.offSet.set(validOffSet);
	}  

	public static void removeOffSet(){
	    offSet.remove();
	}   

	/*
  	 * recordCount :get、set、remove
	 */
	public static int getRecordCount(){
		Integer rc = recordCount.get();
		if(rc == null){
			return 0;
		}
		return rc;
	}

	public static void setRecordCount(int recordCount) {

		SystemContext.recordCount.set(recordCount);
	}
	public static void removeRecordCount(){
		recordCount.remove();
	}

	/*
  	 * pageSize :get、set、remove
	 */
	public static int getPageSize(){
		Integer ps = pageSize.get();
		if(ps == null){
			return 0;
		}
		return ps;
	}

	public static void setPageSize(int pageSize) {

		SystemContext.pageSize.set(pageSize);
	}
	public static void removePageSize(){
		pageSize.remove();
	}

	public static void PageFilter(int recordCount,int pageSize,int currentPage){
    	// 记录总条数
		SystemContext.setRecordCount(recordCount);
		SystemContext.setPageSize(Constant.PAGE_COUNT);
		SystemContext.calTotalPages();
		SystemContext.setCurrentPage(currentPage);
		SystemContext.calOffSet();
    }
}

  通过pageFilter设置总页数,每页显示的条数,当前第几页,总记录条数,传入数据库时offset起始位置。

时间: 2024-11-12 05:30:03

ThreadLocal经典分页的相关文章

ASP经典分页类

================================================================= 'XDOWNPAGE ASP版本 '版本 1.00 'Code by zykj2000 'Email: [email protected] 'BBS: http://bbs.513soft.net '本程序可以免费使用.修改,希望我的程序能为您的工作带来方便 '但请保留以上请息 ' '程序特点 '本程序主要是对数据分页的部分进行了封装,而数据显示部份完全由用户自定义

mybatis常用经典分页方法

来自棱镜学院-在线IT教育www.prismcollege.com 分页方法一: 可以查看如下代码,新建一个数据库分页基础类 package com.ssm.utils.pagination.pagebounds; import java.util.List; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spr

Oracle中经典分页代码!

在Oracle中因为没有top关键字,所以在sqlserver中的分页代码并不适用于Oracle,那么在Oracle中如何来实现分页呢? --查询所有数据 STUNO STUNAME STUAGE STUID STUSEAAT ------ -------------------- ---------- ---------- ---------- 9 王五 15 5.9876E+15 5 13 哈哈 15 5.9876E+15 5 15 李四 12 1.5666E+10 6 1 66 10 55

php 经典分页(推荐和laypage配合)

学习地址:http://www.imooc.com/video/2463 <?php //(ps:推荐使用laypage整站式跳转来渲染分页按钮样式比较舒服http://laypage.layui.com/,还可以开启内置样式和跳页等功能很不错哦~) //require_once '../include.php'; //$sql="select * from imooc_admin"; //$totalRows=getResultNum($sql); ////echo $tota

MySQL分页优化中的“INNER JOIN方式优化分页算法”到底在什么情况下会生效?

本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的方案,因为现实中很多情况都不是固定不变的,能总结出来通用性的做法或者说是规律,是要考虑非常多的场景的,同时,面对能够达到优化的方式要追究其原因,同样的做法,换了个场景,达不到优化效果的,还要追究其原因.个人对此场景在不用情况表示怀疑,然后自己测试了一把,果然发现一些问题,同时也证实了一些预期的想法.

php分页类 可直接调用

/* $num = 130 总条目数 "?p=" host 后面的query 2 分页模式[1,2] */ //调用实例 $nums=130;//总条目数 $subPages=new SubPages($nums,"?p=",2); class SubPages{ private $each_disNums = 15;//每页显示的条目数 private $nums;//总条目数 private $current_page = 1;//当前被选中的页 private

PHP 完美分页

首先一个分页类,如下(摘自网络)可拷贝直接使用 <?php /* * Created on 2013-12-3 * 分页类 * To change the template for this generated file go to * Window - Preferences - PHPeclipse - PHP - Code Templates */ class Pagination { private $each_disNums; //每页显示的条目数 private $nums; //总

分页助手PageHelper学习

PageHelper是mybatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句, 最终实现分页查询功能.在 springboot上集成pagehelper,PageHelper的使用方法及原理如下: 在调用dao的service方法中设置分页参数:PageHelper.startPage(page, size),分页参数会设置在ThreadLocal中,PageHelper在mybatis执行sql前进行拦截,从ThreadLocal取出分页参数,修

spring boot整合mybatis+mybatis-plus

Spring boot对于我来说是一个刚接触的新东西,学习过程中,发现这东西还是很容易上手的,Spring boot没配置时会默认使用Spring data jpa,这东西可以说一个极简洁的工具,可是我还是比较喜欢用mybatis,工具是没有最好的,只有这合适自己的. 说到mybatis,最近有一个很好用的工具--------mybatis-Plus(官网),现在更新的版本是2.1.2,这里使用的也是这个版本.我比较喜欢的功能是代码生成器,条件构造器,这样就可以更容易的去开发了. mybatis