IT/development

[WebDevelopment]pagination

알 수 없는 사용자 2022. 11. 27.

pagination

이건 스프링에만 국한된 기술은 아니고 웹 전반적으로 쓰이는 기술임
화면에 페이지네이션 처리를 하기 위해서는 우선적으로 크게 다음과 같은 정보들이 필요함

  • 현재 페이지 번호(page)
  • 이전과 다음으로 이동 가능한 링크의 표시 여부(prev, next)
  • 화면에서 보여지는 페이지의 시작 번호와 끝 번호(startPage, endPage)

오라클을 기준으로 설명

1.인라인뷰에서 rownum이 힌트를 이용해서 DESC 정렬로 1번 ~ 20번까지 데이터를 구함

[WebDevelopment]pagination - undefined - pagination

2.바깥쪽 SELECT문에서 인라인뷰에서 나온 1 ~ 20번까지의 데이터 중 조건이 rn이 10보다 큰 데이터만 구함(인라인뷰의 결과중 11번부터 20번까지의 데이터만 조회됨
(BNO:10589495 ~ BNO:10589486의 데이터에 해당됨)화면에서 2페이지에 해당되는 데이터임)

[WebDevelopment]pagination - undefined - pagination

이를 mybatis에서 쿼리로 하면 아래와 같음

[WebDevelopment]pagination - undefined - pagination

 

pagination을 위한 공식

페이징의 끝번호(endPage)계산 공식
한페이지에 보여줄 게시글의 갯수는 10개라고 가정

[WebDevelopment]pagination - undefined - pagination을 위한 공식

끝페이지(endPage)는 전체 데이터수(total)에 의해 영향을 받음, 예를 들어 10개씩 보여주는 경우 전체 데이터 수가 80개라고 가정하면 끝번호는 10이 아닌 8이 되어야 함
그러므로 끝번호(endPage)와 한페이지당 출력되는 데이터의 수(amount)의 곱이 전체데이터 수보다 크다면 끝번호는 다시 전체 데이터를 이용해 다시 계산되어야 함
먼저 전체 데이터 수(total)를 이용해서 실제 끝 페이지(realEnd)가 몇 번까지 되는지를 계산한 뒤 만일 실제 끝 페이지가 구해둔 끝번호보다 작다면
실제 끝페이지값을 끝페이지값에 대입해야 함
이전(prev)의 경우는 시작번호(startPage)가 1보다 큰 경우라면 존재하면 됨, 시작번호가 1보다 큰 경우라면 시작번호가 11인 경우부터 해당됨
다음(next)의 경우는 실제 끝번호(realEnd)가 끝번호(endPage)보다 큰 경우에만 존재하면 됨
위와 같이 back단(java)에서 구한 데이터를 가지고 controller에서 model에 담은 뒤 화면단(jsp)으로 보낸 후 화면단에서 해당 데이터를 표시해주면 됨

출처: 코드로 배우는 스프링 웹 프로젝트(개정판)

[WebDevelopment]pagination - undefined - 출처: 코드로 배우는 스프링 웹 프로젝트(개정판)

 

댓글