1. Controller
주소를 통해 페이지 번호를 받는다. 이 홈페이지의 spring 게시판에 들어올 경우 처음에 /board/spring/1 이 호출 되며
{classify}는 pathvariable로 게시판명이 , {seq}는 페이지 번호가 넘어온다.
model을 사용해 현재 페이지 번호를 pnum이라는 이름으로 페이지로 넘긴다.
jsp페이지에서 페이징은 한페이지당 게시물 15개씩 5페이지 단위로 할 것이다.
ex)
1 2 3 4 5 >> 1~5
<< 6 7 8 9 10 >> 6~10
<< 11 12 11~12
@RequestMapping(value = "/board/{classify}/{seq}", method = RequestMethod.GET)
public String board2(@PathVariable String classify,@PathVariable String seq,Model model) {
model.addAttribute("pnum",seq); // 현재 페이지 번호 모델로 넘김
iint startPage = 0;
int endPage = 0;
int page = 0;
try{
// 시작페이지 설정 1~5 페이지 일경우 1
startPage =(Integer.parseInt(seq) - 1) / 5 * 5 + 1;
//ex) 현재 6페이지 일경우 (6-1) /5 * 5 +1 = 1 -> 6 페이지 부터 시작
endPage = startPage + 5 - 1;
if(seq != null && seq != ""){
if(!seq.equals("1")){
// 첫페이지가 아닐경우 그 페이지에 맞는 목록 뽑아옴
int temp = (Integer.parseInt(seq)-1)*15;
page= temp;
}else if(seq.equals("1")){
// 페이지 번호가 1이면 처음부터 15개
page = 0;
}
}
}catch(Exception e){
// 이상한 페이지 번호 들어오면 해당 게시판 처음으로 리다이렉트
return "redirect:/board/"+classify+"/1";
}
// 전체 게시물 갯수 뽑아옴
String rownum = boardDAOService.getRow(classify);
//pageNum 변수는 전체 페이지의 수
int pageNum = Integer.parseInt(rownum)/15+1;
// 게시물이 딱 15개일 경우 다음페이지가 생기지 않게 -1 해줌
if(Integer.parseInt(rownum)%15 == 0){
pageNum--;
}
if(endPage > pageNum){
// 예를 들어 마지막페이지가 12페이지인 경우 endPage가 15페이지 까지 출력되기때문에 12페이지로 바꿔줌
endPage = pageNum;
}
Board board= new Board();
board.setClassify(classify);
board.setPage(page);
//게시판이름과 해당페이에서 뽑아올 게시물 시작번호를 파라미터로 데이터 뽑아옴
List<Board> boardList = boardDAOService.getBoardList(board);
model.addAttribute("list", boardList);
model.addAttribute("pageNum",pageNum);
model.addAttribute("start",startPage);
model.addAttribute("end",endPage);
return "board";
2. 쿼리
전체갯수 가져오는 쿼리
SELECT T2.* FROM(
SELECT MAX(@RNUM:=@RNUM+1) AS RM
FROM (전체 게시물 쿼리) AS T1, (SELECT @RNUM:=0) AS R
) AS T2;
15개씩 끊어서 가져오기
게시물 쿼리 + LIMIT 15 OFFSET #{page}