多线程的问题:如何保证界面的分页参数安全的传递到dao层?

ThreadLocal是Java语言提供的用于支持线程局部变量的类。

所谓的线程局部变量,就是仅仅只能被本线程访问,不能再

线程之间进行共享访问的变量(每个线程一个拷贝),在java

web的各种框架(spring,mybatis,hibernate)中都有使用,今天

我们的这个分页也用ThreadLocal来传递参数


package com.netease.live.admin.util;
 
import com.netease.live.common.util.Constant;
 
/**
  *
  * @author bjliuzezhou
  * @description 使用threadLocal 封装分页所必需传的参数 
  * @date 2017年11月12日
  */
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();
     }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值