IT/development

[WebDevelopment]pagination

알 수 없는 사용자 2022. 11. 27. 07:14
반응형

목차

    pagination

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

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

    오라클을 기준으로 설명

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

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

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

     

    pagination을 위한 공식

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

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

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

     

    반응형