Spring(mysql) paging 처리(1)

북마크 추가

 

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}

 

 

 

 

 

 

AD
관리자
2015-05-06 18:07
SHARE