[PageHelper 페이지 나 누 기] pageNum 과 pageSize 를 차단 합 니 다.
우 리 는 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.