이번에는 페이징에 대해서
먼저 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만 설정을 해두어서 클릭을 못하게 하거나
하는 기능은 넣지 않았고
페이징 기능이 잘 작동되는 건 알 수 있다.
아무래도 학원에서 배운 걸 토대로
스스로 뭘 만들려다 보니까
구글링 하면서 나오는 분들의 소스와
하나하나 차이가 많기도 한데...
일단 만들었다는 것에 의의를 두기로 했다 ㅎ...
'spring > 게시판' 카테고리의 다른 글
게시판 만들기(페이지 유지)(8) (0) | 2021.02.16 |
---|---|
게시판만들기(검색기능)(7) (0) | 2021.02.15 |
게시판 만들기(게시물 삭제)(5) (0) | 2021.02.09 |
게시판 만들기(게시글 수정)(4) (0) | 2021.02.08 |
게시판 만들기(게시글 읽기)(3) (0) | 2021.02.08 |