MyBatis는 SQL을 그대로 사용할 수 있기 때문에 인라인뷰를 이용하는 SQL을 작성하고 필요한 파라미터를 넘겨주는 방식으로 페이징 처리를 하게 된다. 페이징 처리를 위해 SQL 실행시 몇 가지 파라미터가 필요한데, 1) 페이지 번호(pageNum), 2) 한 페이지당 데이터 수(amount)를 전달해야 한다.
페이지 번호와 데이터 개수를 별도의 파라미터로 전달하는 방식도 있지만, 아예 하나의 객체로 묶어 전달하는 방식이 확장성면에서 좋다.
package org.zerock.domain;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
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 |
페이지번호와 데이터개수를 변수로 가진 Criteria 클래스를 생성한다. Criteria는 '검색의 기준'을 의미한다. pageNum과 amount값을 전달하긴 하지만 생성자로 기본값을 1페이지, 10개로 지정해 처리한다.
MyBatis 처리
BaordMapper 인터페이스에는 Criteria 타입을 파라미터로 사용하는 getListWithPaging() 메소드를 작성했다.
public List<BoardVO> getListWithPaging(Criteria cri);
BoardMapper.xml 파일에도 오라클에서 인라인뷰로 ROWNUM을 열 개씩 뽑아오는 SQL문 태그를 추가한다.
<select id="getListWithPaging" resultType="org.zerock.domain.BoardVO">
<![CDATA[
select
bno, title, content, writer, regdate, updatedate
from
(
select /*+ INDEX_DESC(tbl_board pk_board) */
rownum rn, bno, title, content, writer, regdate, updatedate
from
tbl_board
where rownum <= #{pageNum} * #{amount}
)
where rn > (#{pageNum} - 1) * #{amount}
]]>
</select>
|
cs |
BoardController와 BoardService 수정
페이징 처리는 브라우저에서 들어오는 정보들을 기준으로 동작하기 때문에 전달되는 파라미터들을 받는 형태로 컨트롤러와 서비스를 수정한다.
- BoardService.java 수정
public List<BoardVO> getList(Criteria cri);
- BoardServiceImpl.java 수정
@Override
public List<BoardVO> getList(Criteria cri){
log.info("get List with criteria : " + cri);
return mapper.getListWithPaging(cri);
}
- BoardController 수정
@GetMapping("/list")
public void list(Criteria cri, Model model) {
log.info("list : " + cri);
model.addAttribute("list", service.getList(cri));
}
'개발 관련 > Spring' 카테고리의 다른 글
[Spring] REST 방식으로 전환 #02 @RestController에서의 파라미터 (0) | 2022.05.04 |
---|---|
[Spring] REST 방식으로 전환 #01 @RestController의 반환 타입 (0) | 2022.05.04 |
[Spring_Oracle] Oracle Database Paging 처리 (0) | 2022.05.03 |
[Spring] Spring MVC 프로젝트의 기본 구성 (0) | 2022.05.01 |
[Spring] Spring MVC의 Controller #03 Exception 처리 (0) | 2022.05.01 |