[PageHelper 페이지 나 누 기] pageNum 과 pageSize 를 차단 합 니 다.

7374 단어 SpringBoot
본문https://blog.csdn.net/tr1912/article/details/80525621
        우 리 는 pageHelper 를 사용 할 때 항상 뒤쪽 으로 pageNum 과 pageSize 를 전송 하여 우리 가 뒤에서 페이지 를 나 누 어 처리 할 수 있 도록 해 야 합 니 다. 그러나 우 리 는 controller 에서 도 방법 매개 변수 에서 우리 의 데이터 조회 층 을 받 아들 이 고 가 져 가 야 합 니 다. 중간 에 이 두 변수 에 대해 아무런 조작 도 하지 않 았 습 니 다. 이렇게 하 는 것 은 매우 번 거 로 운 일 입 니 다.오늘 우 리 는 이 두 변 수 를 요청 에서 우리 의 조회 층 으로 직접 이동 시 켜 contrller 층 에서 service 층 으로 가 는 어려움 을 뛰 어 넘 을 수 있 도록 차단 을 썼 다.
1. 구조 기본 류        우선, 우 리 는 먼저 pageHelper 에 넣 을 때 반드시 매개 변수 가 있어 야 하 는 종 류 를 만 들 고 하나의 실체 에 해당 합 니 다.
import com.github.pagehelper.Page;
 
import java.io.Serializable;
import java.util.List;
 
public class PageBean implements Serializable {
    private static final long serialVersionUID = 8656597559014685635L;
    private long total;        //    
    private List list;    //   
    private int pageNum;    //    
    private int pageSize;    //      
    private int pages;        //    
    private int size;        //        <= pageSize,     ArrayList size  
 
    /**
     *   Page  ,      Page  , JSON             List   ,
     *        。
     *
     * @param list          page  
     */
    public PageBean(List list) {
        if (list instanceof Page) {
            Page page = (Page) list;
            this.pageNum = page.getPageNum();
            this.pageSize = page.getPageSize();
            this.total = page.getTotal();
            this.pages = page.getPages();
            this.list = page;
            this.size = page.size();
        }
    }
 
    public PageBean() {
        super();
    }
 
    public long getTotal() {
        return total;
    }
 
    public void setTotal(long total) {
        this.total = total;
    }
 
    public List getList() {
        return list;
    }
 
    public void setList(List list) {
        this.list = list;
    }
 
    public int getPageNum() {
        return pageNum;
    }
 
    public void setPageNum(int pageNum) {
        this.pageNum = pageNum;
    }
 
    public int getPageSize() {
        return pageSize;
    }
 
    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }
 
    public int getPages() {
        return pages;
    }
 
    public void setPages(int pages) {
        this.pages = pages;
    }
 
    public int getSize() {
        return size;
    }
 
    public void setSize(int size) {
        this.size = size;
    }
    
}

2. 구조 page 의 조작 실체
        그리고 우 리 는 페이지 의 저장 작업 실 체 를 다시 정의 합 니 다. 이후 에 우리 가 기록 한 페이지 Num 과 페이지 Size 는 모두 여기에서 꺼 냅 니 다.
public class PaginationContext {
 
    //   threadLocal  :pageNum pageSize
    //   Filter   
    private static ThreadLocal pageNum = new ThreadLocal();    //    
    private static ThreadLocal pageSize = new ThreadLocal();    //       
 
    /*
     * pageNum :get、set、remove
     */
    public static int getPageNum() {
        Integer pn = pageNum.get();
        if (pn == null) {
            return 1;
        }
        return pn;
    }
 
    public static void setPageNum(int pageNumValue) {
        pageNum.set(pageNumValue);
    }
 
    public static void removePageNum() {
        pageNum.remove();
    }
 
    /*
     * pageSize :get、set、remove
     */
    public static int getPageSize() {
        Integer ps = pageSize.get();
        if (ps == null) {
            return 1;
        }
        return ps;
    }
 
    public static void setPageSize(int pageSizeValue) {
        pageSize.set(pageSizeValue);
    }
 
    public static void removePageSize() {
        pageSize.remove();
    }
}

        상기 두 가지 유형 을 잘 구성 한 후에 우 리 는 일련의 조작 을 진행 할 수 있다.
3. 요청 차단 filter 구성        이 filter 의 주요 역할 은 우리 의 요청 주소, 즉 servlet 의 request 를 분석 한 다음 에 그 중의 pageNum 파라미터 와 pageSize 파 라 메 터 를 나 누 어 저장 하 는 것 입 니 다. pageContext 에 다른 값 을 전달 하지 않 으 면 기본 값 을 설정 합 니 다.
import org.apache.commons.lang.StringUtils;
 
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
 
/**
 *       
 */
public class PageFilter implements Filter {
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
 
        PaginationContext.setPageNum(getPageNum(httpRequest));
        PaginationContext.setPageSize(getPageSize(httpRequest));
 
        try {
            chain.doFilter(request, response);
        }
        //    Threadlocal,    
        finally {
            PaginationContext.removePageNum();
            PaginationContext.removePageSize();
        }
    }
 
    /**
     *   page    
     *
     * @param request
     * @return
     */
    protected int getPageNum(HttpServletRequest request) {
        int pageNum = 1;
        try {
            String pageNums = request.getParameter("pageNum");//    
            if (pageNums != null && StringUtils.isNumeric(pageNums)) {
                pageNum = Integer.parseInt(pageNums);
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return pageNum;
    }
 
    /**
     *         
     *
     * @return
     */
    protected int getPageSize(HttpServletRequest request) {
        int pageSize = 20;    //     10   
        try {
            String pageSizes = request.getParameter("pageSize");//    
            if (pageSizes != null && StringUtils.isNumeric(pageSizes)) {
                pageSize = Integer.parseInt(pageSizes);
            }
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
        return pageSize;
    }
 
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
 
    }
 
    @Override
    public void destroy() {
 
    }
}

        이상 의 과정 을 거 쳐 우리 가 요청 한 pageNum 과 pageSize 는 모두 thread Local 에 들 어 갔 습 니 다. 그러면 우 리 는 어떻게 사용 해 야 합 니까?
사용 하 다        이전의 요청 은 상관 하지 않 습 니 다. controller 층 에 있 을 때 우 리 는 받 은 대상 을 pageBean 의 할당 구조 로 만 든 실 체 를 선택 합 니 다. 예 를 들 어:
PageBean tBoms=null;
try{
     tBoms =bomFacade.findAllParent();
}catch (Exception e){
}
TBom         。

 service :

public PageBean findAllParent() {
        PageHelper.startPage(PaginationContext.getPageNum(), PaginationContext.getPageSize());  // threadLocal   num size
        TBomExample tBomExample = new TBomExample();
        tBomExample.setOrderByClause("ordertime");
        TBomExample.Criteria criteria=tBomExample.createCriteria();
        criteria.andPidEqualTo("0000");
        criteria.andIsDeleteEqualTo((byte)0);
        List tBoms=tBomDao.selectByExample(tBomExample);
        return new PageBean(tBoms) ;       //      pagebean  
}

        서 비 스 를 실현 하 는 층 에서 우 리 는 먼저 pageHelper 의 조작 류 에 차단 을 요청 할 때 얻 은 pageNum 과 pageSize 두 개의 값 을 부여 한 다음 에 조 회 를 하면 우리 의 페이지 효 과 를 실현 할 수 있 습 니 다. 물론 우 리 는 마지막 으로 돌아 온 실 체 를 우리 의 PageBean 구조의 실체 에 두 고 이 두 값 을 제외 한 다른 값 을 얻 도록 해 야 합 니 다.페이지 에 전송 합 니 다. - - - - -저작권 성명: 본 고 는 CSDN 블 로 거 '왕 소 tr 1912' 의 오리지널 글 로 CC 4.0 BY - SA 저작권 협의 에 따라 원문 출처 링크 와 본 성명 을 첨부 하 시기 바 랍 니 다.원본 링크:https://blog.csdn.net/tr1912/article/details/80525621

좋은 웹페이지 즐겨찾기