Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/8월

22.08.11 - [ WAS ] 페이징 처리

giggs 2022. 8. 31. 10:40

 

-- Index --

 

 

1번 ~ 6번 7번~8번 9번 10번
페이징에 필요한
데이터 값 구하기
pageVo로 뭉치고,
조건맞게 조회해오기
pageVo활용해서
화면보여주기
버튼 만들기

 

 

 


 

 

페이징 처리

  • ( 컨트롤러에서 처리한다. )

 

 

필요 data 체크 및 세팅

  • 시작 페이지 / 끝나는 페이지 / 게시글 수 등을 알아야 페이징 처리 가능하다.
  • listCount , currentPage, pageLimit, boardLimit
  • maxPage, startPage, endPage

 

 

 

 


 

 

 

1. listCount : [ 현재 게시글 총 개수 ] 구하기

 

 

1-1 DB 가서 알아와야 한다. - ( SELECT 작업 )

 


 

1-2 dao 작업 - SELECT COUNT()

  • SELECT작업이지만 COUNT( ) 함수 사용으로 결과값이 하나만 나오고 그 값 int로 가져다 사용

 

 

 

 

count 얻어와서 listCount 에 대입해주기! 

 

 

 


 

 

2. currentPage : [ 현재 페이지 ] 값 구하기

 

  • 현재 페이지는 - 사용자에게 입력받아온 값 ( 클릭 이벤트로 넘어온 값 ) 으로 채워주기

 

 


 

 

3. pageLimit 과 boardLimit : [ 하단 버튼 개수, 페이지 게시글 개수 ]

 

  • [ 페이지 하단에 보여줄 버튼 개수, 페이지에 보여줄 게시글 개수 ]
  • 디자인 - 프로젝트 로직에 맞게 임의로 지정

 

 

 

 


 

 

 

4. maxPage : [ 가장 마지막 페이지 = 총페이지 수 ] 구하기

 

  • listCount 와 boardLimit 값을 가지고 연산하여 구한다.

 

 

 

더블로 형변환해서 소수점 나오도록해주고 올림처리 해서 마지막 int 값으로 얻어오기

 

 

 

 


 

 

5. starting page : [ 페이징바의 시작 ] 구하기

 

  • 내가 3페이지 보고있으면 1~10페이지
  • 내가 13페이지 보고있으면 11~10페이지
  • 1이랑 11이 스타팅페이지

 

 

 


 

starting page 계산 공식 ::::: n * pageLimit + 1

 


 

n의 값 구하기

 

 


n값 구하는 식으로 최종 식 완성

 

 

 

 

스타트페이지는 1 / 11 / 21 / 31/ 41 / 51 이 애들이다~

페이지limit 단위 넘어가면 스타트 페이지 바뀐다.

1에서 11

11에서 21

n * pageLimit +1

 

 

 

 


 

 

6. endPage : [ 페이징 바의 끝 ] 구하기

 

  • startPage, pageLimit , maxPage로 구하기

 

 

 


 

페이징 처리에 필요한 데이터 구하기 끝! 

 

페이징 처리 시작해보기 

 


 

 

7. 객체로 뭉치기 위해서 - PageVo 만들어주기

  • 사용할 data(변수)가 많다. - 객체로 뭉쳐서 관리하기

 

 

 


 

8. pageVo 가지고 글 조회해오기

  • 몇 번 게시글 보여주어야 하는지 알아야 하니까 서비스 레이어에게 pageVo 담아서 전달.
  • 결과는 BoardVo 나올 것인데 게시글이 한 개만 올게 아니니까 list로 가져오기

 

 

  • 어레이 리스트보다 List로 받아주는 것이 좋다 – 왜? 더 넓은 범위의 유연한 걸로 사용.
  • 서비스 레이어 결과가 어레이 리스트 말고 – 링크드 리스트로 바꿨다 해도 여기서는 변경 필요 없다.

 


8-1 sql 문 체크

 

 

 

1번 쿼리문

  • 게시판 글 모두 가져오도록 select 쿼리 작성

 

 

2번 쿼리문

  • 결과 15개 잘 나오는데
  • 우리는 사용자의 요청에 따라 SELECT 하는 부분이 다르다.
  • 어캐해야하까? - ROWNUM 이용해서 해보기
  • ROWNUM을 SELECT에 써주면 ORDERBY보다 먼저 실행되므로 결과가 이상하게 나올 수 있다. 
  • 서브 쿼리를 이용해서 처리해주기

 

 

3번 쿼리문

  • ROWNUM까지 됐으면 – 1~10번까지 조회하면 된다.
  • 그런데.. 11~20번까지는 조회 안된다. - 완성되지 않은 테이블에 WHERE 조건 바로 실행하면 – 첫 번째 조건부터 실패라서 11부터 어떤 것이 오더라도 조회 안된다.
  • 완성된 테이블로 취급되어서 WHERE조건 처리되도록 한 번 더 서브 쿼리로 해주기

 

## BETWEEN 11 AND 20에서 11이랑 20만 "?"로 바꿔서 java로 가져가자

 

 


 

8-2  BETWEEN ? AND ?  : 물음표에 채워줄 값 구하기 

  • 처음 게시글 번호와 마지막 게시글 번호를 구해야 한다.

 

 


 

 


 

 


 

 

start = ( currentPage - 1 ) * boardLimit + 1

end = start + boardLimit - 1

 

 

 

 

 

우리가 구하는 start랑 end 는

여기 넣어줄 애들 StartPage()랑 다른 애다..

 

 


 

 

9. 포워딩 후 페이징 작업해주기

 

 

9-1 컨트롤러 가서 화면 보여주기 작업

 

 

 


 

9-2 화면 쪽에서 받은 객체( pv ) 활용해서 페이징 처리해주기

 

 

 


 

9-3 현재 페이지를 다시 요청 시에는 새로고침 안되도록해주자.

 

 

 

 


 

10. 페이징 버튼 작업하기

 

 

10-1 페이징 다음 버튼 만들어주기

 

 

 


 

 

10-2 버튼 보이게 안 보이게 해 주기

  • 맨 처음 페이지에서는 이전 버튼 안 보이도록 / 맨 마지막 페이지에서는 다음 버튼 안보이도록

 

 

 

 

 

페이징 처리 완료!!