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起始位置。

ThreadLocal经典分页的更多相关文章

  1. Oracle中经典分页代码!

    在Oracle中因为没有top关键字,所以在sqlserver中的分页代码并不适用于Oracle,那么在Oracle中如何来实现分页呢? --查询所有数据 STUNO STUNAME STUAGE S ...

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

    学习地址:http://www.imooc.com/video/2463 <?php //(ps:推荐使用laypage整站式跳转来渲染分页按钮样式比较舒服http://laypage.layu ...

  3. php与oracle11g经典分页

    <?php $t1 = xdebug_time_index(); $conn = oci_connect("SCOTT","TIGER","19 ...

  4. php动态分页类

    <?php /** * 页面名称:cls_page.php */ class Page { private $each_disNums; //每页显示的条目数 private $nums; // ...

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

    本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的 ...

  6. php分页类 可直接调用

    <?php /** * 分页类 * @author xyy * 调用分页实例 $subPages=new SubPages(数据总条数);//实例化分页类 * //$subPages->s ...

  7. php 页面分页样式 示例

    <?php class SubPages { private $each_disNums; //每页显示的条目数 private $nums; //总条目数 private $current_p ...

  8. 分页助手PageHelper学习

    PageHelper是mybatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句, 最终实现分页查询功能.在 springboot上集成pagehelper ...

  9. Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一)

    相关的maven的 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...

随机推荐

  1. 为Distinct准备的通用对比器

    使用Linq过滤重复对象的时候,我们使用Distinct. 但是Distinct对int long等值类型才有效果,对于对象我们需要自己写个对象. 以下利用泛型封装了两个类: CommonCompar ...

  2. 求一个二维整数数组最大子数组之和,时间复杂度为N^2

    本随笔只由于时间原因,我就只写写思想了 二维数组最大子数组之和,可以  引用  一维最大子数组之和 的思想一维最大子数组之和 的思想,在本博客上有,这里就不做多的介绍了 我们有一个最初的二维数组a[n ...

  3. JSONObjec序列化对象过滤为null的属性

    @Test public void test3() { PgwReqtBody3002 pgwReqtBody3002 = new PgwReqtBody3002(); pgwReqtBody3002 ...

  4. JQuery版评分控件

    Hi All, 分享一个学习JQuery做的一个评分控件. 需求:当鼠标移动到 ‘☆’ 上时,该字符左边的 ‘☆’ 变成 '★',该字符右边仍然是 ‘☆’, 并显示相应星星数的评价结果:当鼠标推出 ‘ ...

  5. 关于springmvc时request的getReader()和getInputStream()只能调用一次的解决办法

    最近准备在原有的SSM项目的基础上添加完善的日志分析,由于是APP的后台系统,之前在规划APP的时候,并没有在APP上做埋点的处理,而如果想要进行埋点处理的话,对于未能新升级的APP用户来说,就是去了 ...

  6. linux中搭建java开发环境

    JDK安装 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载对应jdk版本, ...

  7. Cohort Analysis and LifeCycle Grids mixed segmentation with R(转)

    This is the third post about LifeCycle Grids. You can find the first post about the sense of LifeCyc ...

  8. 小K的H5之旅-CSS基础(一)

    一.什么是CSS W3C标准中,倡导有3:其一为内容与表现分离,其二为内容与行为分离,其三为内容结构的语义化.其倡导中第一条的"表现"指的便可以说是CSS.CSS全称Cascadi ...

  9. C#程序遍历数组A中所有元素

    ] { "a1","a2","a3","a4","a5"}; //第一种方法 ; i < A. ...

  10. java中的流程控制语句总结

    程序的结构分类: 顺序结构:按照写代码的顺序 一次执行 选择结构:根据条件的不同有选择的执行不同的代码 循环结构:在一定条件下 反复执行某一片代码 选择结构: 也叫分支结构 根据条件的不同,有选择的执 ...