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起始位置。
ThreadLocal经典分页的更多相关文章
- Oracle中经典分页代码!
在Oracle中因为没有top关键字,所以在sqlserver中的分页代码并不适用于Oracle,那么在Oracle中如何来实现分页呢? --查询所有数据 STUNO STUNAME STUAGE S ...
- php 经典分页(推荐和laypage配合)
学习地址:http://www.imooc.com/video/2463 <?php //(ps:推荐使用laypage整站式跳转来渲染分页按钮样式比较舒服http://laypage.layu ...
- php与oracle11g经典分页
<?php $t1 = xdebug_time_index(); $conn = oci_connect("SCOTT","TIGER","19 ...
- php动态分页类
<?php /** * 页面名称:cls_page.php */ class Page { private $each_disNums; //每页显示的条目数 private $nums; // ...
- MySQL分页优化中的“INNER JOIN方式优化分页算法”到底在什么情况下会生效?
本文出处:http://www.cnblogs.com/wy123/p/7003157.html 最近无意间看到一个MySQL分页优化的测试案例,并没有非常具体地说明测试场景的情况下,给出了一种经典的 ...
- php分页类 可直接调用
<?php /** * 分页类 * @author xyy * 调用分页实例 $subPages=new SubPages(数据总条数);//实例化分页类 * //$subPages->s ...
- php 页面分页样式 示例
<?php class SubPages { private $each_disNums; //每页显示的条目数 private $nums; //总条目数 private $current_p ...
- 分页助手PageHelper学习
PageHelper是mybatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句, 最终实现分页查询功能.在 springboot上集成pagehelper ...
- Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一)
相关的maven的 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...
随机推荐
- LeetCode4. Median of Two Sorted Arrays---vector实现O(log(m+n)--- findkth
这道题目和PAT上的1029是同一题.但是PAT1029用O(m+n)的时间复杂度(题解)就可以,这道题要求是O(log(m+n)). 这道题花费了我一个工作日的时间来思考.因为是log因而一直思考如 ...
- 来自一位工作一年多的猿的分享 ------- ioc
这是我第一次写东西记录吧:还记得小学老师教的写文章要有"开篇 起伏 高潮...高潮 结束",反正我不会用上: 最近在研究IOC这玩意:百度了很多关于这方面的帖子:关于IOC和DI的 ...
- Git版本控制,rsync同步文件,完成线上部署
之前项目开发完成,测试阶段,借着此时,由于公司暂时用两台aliyun ecs 做业务层,所以每次都需要同步线上文件,进而想着搞一搞服务器端(小公司,新项目,先小搞一把),搭建一套小的版本控制上线的 ...
- .Net程序员学用Oracle系列(7):视图、函数、存储过程、包
1.视图 1.1.创建.删除及调用普通视图 1.2.高级视图介绍 2.函数 2.1.系统函数介绍 2.2.创建.删除及调用自定义函数 3.存储过程 3.1.创建.修改及删除存储过程 3.2.调用存储过 ...
- 面试(2)-java-se-HashSet和TreeSet
Set是java中一个不包含重复元素的collection.更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素.正如其名称所暗示的, ...
- 028hibernate缓存(性能优化策略)
一级缓存 二级缓存 查询缓存 缓存是为了提高性能 变化不是很大,相对静态的对象放入缓存 对象的创建比较耗时
- struts2.1.6教程十二、总结
本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例. 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官 ...
- struts2.1.6教程九、文件上传下载(了解)
首先建立struts2UpDownLoad项目,搭建好struts2基本的开发环境. 上传实例 步骤一:upload.jsp代码如下: <s:form action="upload&q ...
- LINQ基础(三)
一.并行LINQ System.Linq名称空间中包含的类ParallelEnumerable可以分解查询的工作,使其分布在多个线程上. 尽管Enumerable类给IEnumerable<T& ...
- javascript基础-正则表达式
概述 正则表达式被用来检索.替换那些符合某个模式的文本 标准正则表达式语法 javascript对正则表达式的支持 替代写法 逆向环视 //需求:替换mpre.cnsuning.com为${pre}, ...