본문 바로가기
spring/게시판

게시판 만들기(페이징)(6)

by coie 2021. 2. 9.

이번에는 페이징에 대해서 

 

 

먼저 sql문입니다.

위와 같이 row_number() over()를 통하여

각 row들을 내림차순 한 것이다.

구글링을 통해서 알아낸 건데

가끔 limit이 보이는데 처음에는

"이게 더 간단한데?" 했다가

mysql에서만 사용 가능하다기에... 아아.... 하고

row_number를 사용했다.ㅎ...

어쨌든 저 렇게 sql문법을 사용해주면

desc 즉 내림차순으로 총 10개의 데이터만 출력할 수 있다.

 

mapper

전에 작성한 list(게시물 조회)의 데이터를 수정해주면 된다.

between의 값은 criteria에서 받아오면 된다.

이렇게 하니 resulttype과 parametertype의 차이가 확 느껴진다.

결과는 resulttype, 값을 입력받는 곳이 parametertype

아 또 cdata라는 것이 결국 특수문자가 포함될 경우 사용하는 것이라는 것을 알게 돼서

가능한 한 사용 안 하려고 다짐했습니다 ㅎ.,..

 

Criteria.class

일단 기본 클래스인데

구글링을 하면서 공부를 하다 보니 알게 된 건

모든 사람들이 클래스명을 하나로 통일 해 두어서

똑같이 따라 한 것입니다.

page=현재 페이지

perpageNum=게시물 개수이다

 

현재 페이지란 

[1][2][3][4]라고 페이징이 되어있고

내가 [1]에 해당하는 list를 보고 있을 때의 [1]을 가리키는 것이다.

perpageNum의 경우는 말 그대로 현재 보고 있는 list에 보이는 게시물의 개수이다.

 

그리고 getRowstart의 경우

예시를 들자면

[1]의 게시판에서는 총 10개가 보여야 한다

row_number()는 1~10까지 보이게 된다.

하지만 [2]를 눌렀을 경우는?

11~20까지 보여야 한다.

그래서 ((2-1)*10)+1=11

11번부터 시작한다는 것을 위의 식으로 나타낸 것이다.

getRowEnd도 위와 같이 생각하면 이해하기 쉬울 것이다.

 

위의 클래스를 만든 이유를 보여주는 pageMaker클래스이다.

 

기본적으로 set, get은 다 동일하고

일부 다른 부분들만 표현했다.

startPage랑 endPage는

쉽게 [1][2][3][4][5]가 있으면

[1]이 start [5]가 end이다

prev와 next의 경우

[1][2][3][4][5][다음]

흔히 페이징을 볼 때 이렇게 다음 버튼은 있지만

이전 버튼은 없다. 왜냐? 1이 시작이니까

그것을 boolean으로 받아 내는 것이다.

next도 마지막일 경우 [다음] 버튼이 안 나오게 하기 위한 것이다

마지막 displayPageNum은 

페이징 번호를 [1][2][3][4][5] 5개로 할 것인가

아니면 [1]~~[10]처럼 10개로 할 것인가의 설정이다.

그 외에 대한 설명은

주석에 달린 것도 있지만

본인 나름대로 정리하는 것이 제일 좋다고 생각한다.

위의 것을 본다면

그럼 totalcount 즉

게시물의 총개수도 구해야 된다는 것을 알 수 있다.

바로 위처럼 count sql문을 바로 mapper에 추가해준다.

 

그리고 controller

기본 list controller에서 수정을 해준다.

먼저 list의 경우 rowStart와 rowEnd의 경우에는

Criteria에 있으므로 Cri를 list에 설정해주고

list를 model로 설정해준다.

그 후 

pagemaker를 선언한 후

cri를 먼저 set 해준다.

pagemaker의 calcData를 보면

그 cri들이 어디에 어떻게 사용되는지 알 수 있다.

그리고 게시물의 총개수도 필요하므로 똑같이 대입한 후

 list와 같이 model에 설정해준다.

 

마지막 list.jsp

list의 경우 위의 경우에는

저번에 적용해둔 그대로 두면 되고

밑의 ul부분을 추가해주면 된다.

그 후 내용은 코어 라이브러리를 이용해서

입력을 해주면 된다.

 

그 결과물은

이 와 같이 나오게 된다.

일단 기본 css만 설정을 해두어서 클릭을 못하게 하거나 

하는 기능은 넣지 않았고 

페이징 기능이 잘 작동되는 건 알 수 있다.

 

아무래도 학원에서 배운 걸 토대로

스스로 뭘 만들려다 보니까

구글링 하면서 나오는 분들의 소스와

하나하나 차이가 많기도 한데...

일단 만들었다는 것에 의의를 두기로 했다 ㅎ...