[Spring] 페이징 화면 처리

업데이트:

MyBatis에서 전체 데이터의 개수 처리

페이지의 이동이 모든 작업에서 정상적으로 이루어지는 것을 확인했다면 최종적으로는 데이터베이스에 있는 실제 모든 게시물의 수(total)를 구해서 PageDTO를 구성할 때 전달해 주어야 된다.
전체의 개수를 구하는 SQL은 어렵거나 복잡하지 않다.

어노테이션으로 처리해도 무방하지만 BoardMapper 인터페이스에 getTotalCount(0 메서드를 정의하고 XML을 이용해서 SQL을 처리한다.


BoardMapper

public int getTotalCount(Criteria cri);


getTotalCount()는 Criteria를 파라미터로 전달받도록 설계하지 않아도 문제가 생기지 않지만, 게시물의 목록과 전체 데이터 수를 구하는 작업은 일관성 있게 Criteria를 받는 것이 좋다.


BoardMapper.xml

<select id="getTotalCount" resultType="int">
    select count(*) from tbl_board where bno >0
</select>


BoardService와 BoardServiceImpl에서는 별도의 메서드를 작성해서 BoardMapper의 getTotalCount()를 호출한다.


BoardService 인터페이스

public int getTotal(Criteria cri);


BoardServiceImpl

@Override
public int getTotal(Criteria cri) {
    
    log.info("get total count");
    
    return mapper.getTotalCount(cri);
}


BoardController에서는 BoardService 인터페이스를 통해서 getTotal()을 호출하도록 변경한다.

BoardController

@GetMapping("/list")
public void list(Criteria cri, Model model) {
    
    log.info("list:" + cri);
    model.addAttribute("list", service.getList(cri));
    //model.addAttribute("pageMaker", new PageDTO(cri,123));
    
    int total = service.getTotal(cri);
    
    log.info("total:" + total);
    
    model.addAttribute("pageMaker", new PageDTO(cri, total));
    
}





관련 서적 : 코드로 배우는 스프링 웹 프로젝트

태그:

카테고리:

업데이트:

댓글남기기