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. OC—不可变字符串NSString

  2. 建立自己的Web service(SOAP篇)

    1.简介 这篇文章主要介绍采用SOAP来建立以及访问Web service接口. Web service是一个平台独立的,低耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML(标准通用 ...

  3. Ubuntu下如何解压各类文件

    tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)---------------.gz解压1:gunzi ...

  4. hosts文件原理

    hosts文件是一个用于储存计算机网络中各节点信息的计算机文件.这个文件负责将主机名映射到相应的IP地址.hosts文件通常用于补充或取代网络中DNS的功能.和DNS不同的是,计算机的用户可以直接对h ...

  5. java内存模型3

    数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序. 当代码 ...

  6. NIO Socket编程实例

    1.阻塞模式实例 NIOUtil类,用来通过SOcket获取BufferedReader和PrintWriter. package IO; import java.io.BufferedReader; ...

  7. 「CODVES 1922 」骑士共存问题(二分图的最大独立集|网络流)&dinic

    首先是题目链接  http://codevs.cn/problem/1922/ 结果发现题目没图(心情复杂 然后去网上扒了一张图 大概就是这样了. 如果把每个点和它可以攻击的点连一条边,那问题就变成了 ...

  8. .NET 通过 Autofac 和 DynamicProxy 实现AOP

    什么是AOP?引用百度百科:AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.实现AOP主要由两 ...

  9. DropDownList如何绑定DataTable,如何绑定DataSet

    dpDnUpMenu是我定义的DropDownList控件 如果直接使用下面的方式,则会出现如下错误 dpDnUpMenu.DataSource = menu_tbBll.GetPID() dpDnU ...

  10. 超声波 HC-SR04

    三.实验原理 1. 超声波传感器简介 超声波测距系统主要应用于汽车的倒车雷达.及机器人自动避障行走.建筑施工工地以及一些工业现场例如:液位.井深.管道长度等场合.超声波是一种在弹性介质中的机械振荡,有 ...