읽은 책 정리/코드로 배우는 스프링 웹 프로젝트

[Spring] MyBatis와 스프링에서 페이징 처리

포포015 2020. 12. 21. 19:52

페이징 처리를 위해서는 SQL을 실행할때 몇가지 파라미터가 필요하다는점이다.

페이징 처리를 위해서 필요한 파라미터는 1)페이지번호(pageNum) , 2) 한페이지당 몇개의 데이터(amount)를 보여줄지

 

페이지 번호와 몇개의 데이터가 필요한지 별도의 파라미터로 전달해도 되지만,

아예 이 데이터를 하나의 객체로 묶어서 전달하는 방식이 확정성이 더좋다.

 

org.zerock.domain 패키지에 Criteria 클래스 작성.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package org.zerock.domain;
 
import lombok.Data;
 
@Data
public class Criteria {
 
    private int pageNum;  //페이지 번호
    private int amount;    //페이지 출력개수
    
    public  Criteria() {
        this(1,10);
    }
 
    public Criteria(int pageNum, int amount) {
        this.pageNum = pageNum;
        this.amount = amount;
    }
    
}
 
cs

위 클래스의 용도는 pageNum과 amount 값을 전달하는 용도지만 ,

생성자를 통해 기본값을 1페이지 ,10개로 지정해서 처리.

 

1
public List<BoardVO> getListWithPagin(Criteria cri); 
cs

Mapper 인터페이스에 페이징처리된 리스르 메소드를 선언후.

mapper.xml을 수정해야하는데, 전에 작성했던 SQL은 < , >= 등 부등호를 xml에서 사용할수 없기때문에,

CDATA 태그를 추가해줌.

1
2
3
4
5
6
<select id="getListWithPaging" resultType="org.zerock.domain.BoardVO">
    <![CDATA[
    select bno,title,content from (select /*+INDEX_DESC(tbl_board pk_board) */
    rownum rn, bno, title, content from tbl_board where rownum <= #{pageNum} * #{amount}) where rn > (#{pageNum} -1) * #{amount}
    ]]>    
    </select>
cs

 

13.2 BoardController와 BoardService 수정

1
    public List<BoardVO> getList(Criteria cri);
cs

Criteria를 파라미터로 처리하도록 인터페이스 , ServiceImpl 클래스 수정.

1
2
3
4
5
    @GetMapping("/list")
    public void list(Criteria cri, Model model) {
        log.info("컨트롤러 list + cri ");
        model.addAttribute("list", service.getList(cri));
    }
cs

Criteria 클래스를 하나 만들어두면 위와 같이 편하게 하나의 타입만으로 파라미터나 리턴타입을 사용할수 있다.