2021. 6. 23. 23:16ㆍSpring
이번에는 Spring 에서 페이징, 페이지네이션 하는 방법을 알아 봅시다.
페이징 하는 건 JSP 할 때도 한번 해봤었는데, 비슷합니다.
페이징
게시판 같은 곳에 글이 많을 때, 페이지를 나눠서 나오도록 하고 / 밑에 페이지에 대한 걸 보여주는 것을 페이징 이라고 합니다.
먼저, 게시판 테이블에 PL/SQL 문을 사용해서 데이터를 300개 추가 했습니다. ( myBatis , Lombok 등 설정된 상태 )
게시판의 글들을 나눠서 가져오는 방법은 아래의 코드처럼 작성해 주면 됩니다. ( oracle 공부할때 했었죠 )
이 코드에서, 숫자가 들어가는 10 , 20 만 유동적으로 바꿔주기만 하면 됩니다.
1 page 일 경우 게시글이 0개 ~ 10개 -> RN > (1page - 1) AND RN <= (1page * 10)
2 page 일 경우 게시글이 11개 ~ 20개 -> RN > (2page - 1) AND RN <= (2page * 10)
로 나오게 하면 되겠죠?
page 번호를 가지고 있을 변수와, 1페이지 당 개수를 가지고 있을 변수를 만드는데, Util 클래스에 만들어 줍시다.
만약, pageNum, amount 가 매개변수로 넘어오지 않으면, 1과, 10으로 초기화를 합니다.
이제, Service, Mapper 에 getList ( 게시글을 받아올 ) 메서드에 Criteria 를 매개변수로 받는 메서드를 만듭니다.
Service, Mapper 각각 메서드를 만들어 주었다면, Mapper는 ".xml" 에서 구체화를 해주면 되죠?
그러면, 위에서 사용했던 SQL문을 사용하면 됩니다.
다만 이때, < , > 기호가 태그처럼 인식이 되는데, 이를 해결하기위해서 "<![CDATA[]]>" 를 사용합니다.
[] 안은 전부 문자열로 인식하겠다 라는 뜻입니다.
이렇게 만들었다면, 컨트롤러에서 Service.getList 를 실행하고, 화면으로 가져가기만 하면 되겠네요
해당 코드로, 컨트롤러에서 넘어가는 view 로 "list" 라는 이름으로 위의 코드를 통한 데이터들을 가지고 갑니다.
view 에서는, 가지고 온 데이터들이 List 형태이기 때문에, jstl 의 <c:forEach> 를 사용해서 각각의 디자인에 맞게 뿌려줍니다.
※ 날짜는 밀리초까지 가지고 있기 때문에, formatdate 를 사용함.
그러면, 딱 BNO 기준으로 내림차순 해서 게시글이 10개만 나왔을 겁니다.
여기까지 하면, pageNum = 1, amount = 10 으로 고정이 되어 있기 때문에, 아래의 페이지네이션도 해결을 해야겠죠?
pageNation 을 계산하기 위해서는 아래와 같은 변수들이 필요합니다.
그리고 이 변수들을, "PageVO" 클래스를 만들어서 한번에 관리를 할 거에요
※ cri 는 선생님이 나중에 필요할 것 같다고 해서 만들긴 했습니다만, 멤버변수로 존재하는 cri는 사용하지 않았습니다.
생성자를 통해서, 위의 변수들을 초기화 해줄 겁니다.
1. pageNum, amount, total, cri 는 매개변수로 받아서 초기화 합니다.
2. endPage(끝번호) 를 계산 합니다
endPage 는 페이지의 가장 끝을 나타내는게 아닌, 10, 20, 30 ... 등을 나타내는 끝 번호 입니다.
※ amount가 실수 형태로 계산이 되어야 할 상황이 있고, 정수 형태로 계산이 되어아 할 상황이 있기 때문에 변수가 아닌 숫자로 썻습니다.
3. startPage(시작번호) 를 계산 합니다.
startPage 는 페이지의 처음을 타나냅니다. 1, 11, 21 ... 등
4. 정말 마지막 끝번호 realEnd 를 계산 합니다
게시글이 정확히 끝나는 페이지를 계산합니다.
※ total 은 매개변수로 전달 받았는데, 게시글의 전체 개수를 전달해야 합니다. ( mapper 에 메서드를 만들어야 겠죠? )
5. endPage를 재계산 합니다.
6. next, prev 버튼 활성화 여부
7. total 을 전달하기 위해서, mapper 를 만듭니다.
service 부분에는 mapper.java 각각에 맞도록 메서드를 작성해 줍니다.
8. Controller 에서, 위에서 만든 PageVO를 사용하고, View로 전달합니다
9. view 에서 , 페이지네이션을 작성 합니다.
이렇게 해주면 완성 입니다 !
각각의 페이지에 맞게, 게시글들을 가지고 오게 됩니다.
※ 여기까지 게시판을 구현할 줄 안다면, "1인분" 이라고 하세요
'Spring' 카테고리의 다른 글
Day91 - [Spring]REST API(Rest Controller) (0) | 2021.06.24 |
---|---|
Day90 - [Spring]검색페이징 ( 게시판 검색 구현 ) (2) | 2021.06.24 |
Day89 - [Spring]게시판 기능 구현하기 (0) | 2021.06.22 |
Day88 - [Spring]타일즈 뷰 템플릿(Tiles View Template) (0) | 2021.06.22 |
Day88 - [Spring]롬복(Lombok) 설치 및 사용법 (0) | 2021.06.21 |