2017 - 10 - 24 (화)
코드로 배우는 스프링 웹프로젝트[구멍가게 코딩단 지음] 참조
1 .. 페이징
페이징을 하는 이유는 한번에 최소한의 게시물 즉, 데이터를 전송받기 위함이다.
페이징 처리 절차
1 . 페이징처리를 하기 위한 DAO인터페이스 구현
public List<BoardVO> listPage(int page) throws Exception;
2 . Mapper에 SQL 추가 ( 이전에 typeAlias 설정을 통해 returnType 을 축약할 수 있다. )
<select id="listPage" resultType="BoardVO">
<![CDATA[
select
bno, title, content, writer, regdate, viewcnt
from
tbl_board
where bno > 0
order by bno desc, regdate desc
limit #{page}, 10
]]>
</select>
화면에 10개씩 데이터를 보여주고자 할 때 1페이지는 limit 1, 10 // 2페이지는 limit 10, 10 처럼
limit 시작할 게시글번호 , 한 페이지에 게시할 게시글 갯수
3 . 앞서 작성한 DAO인터페이스 메소드를 구현한다.
@Override
public List<BoardVO> listPage(int page) throws Exception {
if (page <= 0) {
page = 1;
}
page = (page - 1) * 10;
return session.selectList(namespace + ".listPage", page);
}
4 . Criteria 클래스 작성 ( 아래같이 게시물 하단에 수많은 글들을 파티션할 수 있도록 클래스를 생성한다.)
public class Criteria {
private int page;
private int perPageNum;
public Criteria() {
this.page = 1;
this.perPageNum = 10;
}
public void setPage(int page) {
if (page <= 0) {
this.page = 1;
return;
}
this.page = page;
}
public void setPerPageNum(int perPageNum) {
if (perPageNum <= 0 || perPageNum > 100) {
this.perPageNum = 10;
return;
}
this.perPageNum = perPageNum;
}
public int getPage() {
return page;
}
// method for MyBatis SQL Mapper -
public int getPageStart() {
return (this.page - 1) * perPageNum;
}
// method for MyBatis SQL Mapper
public int getPerPageNum() {
return this.perPageNum;
}
@Override
public String toString() {
return "Criteria [page=" + page + ", "
+ "perPageNum=" + perPageNum + "]";
}
}
5 . DAO인터페이스에 Criteria 파티션 별 데이터를 list로 가져올 수 있는 메서드 정의
6 . 매퍼를 작성해준다. 페이지의 시작 게시물번호 , 페이지 당 게시글 갯수 를 활용하여 selectList를 한다.
<select id="listCriteria" resultType="BoardVO">
<![CDATA[
select
bno, title, content, writer, regdate, viewcnt
from
tbl_board
where bno > 0
order by bno desc, regdate desc
limit #{pageStart}, #{perPageNum}
]]>
</select>
7 . 이전에 DAO에서 정의한 메서드를 구현해준다.
@Override
public List<BoardVO> listCriteria(Criteria cri) throws Exception{
return session.selectList(namespace+".listCriteria",cri);
}
8 . Service에 추가한 DAO를 처리할 인터페이스 추가 한다.
public List<BoardVO> listCriteria(Criteria cri) throws Exception;
9 . 이전에 추가한 서비스를 구현한다.
@Override
public List<BoardVO> listCriteria(Criteria cri) throws Exception {
return dao.listCriteria(cri);
}
10 . 컨트롤러에 listCriteria를 호출하는 메서드를 추가한다.
@RequestMapping(value = "/listCri", method = RequestMethod.GET)
public void listAll(Criteria cri, Model model) throws Exception {
logger.info("show list Page with Criteria......................");
model.addAttribute("list", service.listCriteria(cri));
}
11 . PageMaker 를 생성한다 . (PageMaker에는 페이징을 하기위한 전체 게시물 갯수, 시작 페이지, 끝 페이지와 prev, next를 정의해준다.)
12 . PageMaker 를활용하여 BoardController 작성한다.
13 . listPage.jsp 를 작성하여 페이징 처리된 화면을 구현한다.