DTO(Data Transfer Object)
데이터를 오브젝트로 변환하는 객체로
VO는 DB에서 받아온 데이터를 그대로 전달한다면,
DTO는 DB에서 받아온 데이터를 가공해서 전달
게시물 목록에서 페이징 처리를 하는 과정
로그인에 성공하면 게시물 목록 화면으로 넘어오는데, 이 때 넘어오는 page 파라미터를 현재 페이지로 사용
페이징 처리에 필요한 변수는
- 현재 페이지
- 전체 게시물 수
- 페이징된 글 목록
- 전체 페이지 수
- 시작 페이지
- 마지막 페이지
전체 게시물 수와 페이징된 글 목록은 DAO를 통해 DB에서 데이터를 가져오고,
전체 페이지 수와 시작 페이지, 마지막 페이지를 가공
DAO에서 가져올 전체 게시물 수 데이터를 위한 쿼리문
SELECT count(*) FROM 테이블명;
DAO에서 가져올 페이징된 글 목록 데이터를 위한 쿼리문 - LIMIT
구문으로 10개씩 끊어서 가져오기
SELECT count(*) FROM 테이블명 LIMIT 각 페이지별 시작번호, 나열할 개수;
SELECT count(*) FROM 테이블명 LIMIT (currentPage - 1) * 10, 10;
변수 생성
private int currentPage; // 현재 페이지
private int total; // 전체 게시물 수
private List<BoardVO> boardList; // 페이징 된 글목록
private int totalPages; // 전체 페이지
private int startPage; // 시작 페이지
private int endPage; // 마지막 페이지
알고있는 정보: 현재 페이지, 전체 게시물 수와 페이징된 글 목록을 통해 나머지 데이터를 가공
생성자
public BoardDTO(int currentPage, int total, List<R01BoardVO> boardList) {
this.currentPage = currentPage;
this.total = total;
this.boardList = boardList;
if(total == 0) {
this.totalPages = 0;
this.startPage = 0;
this.endPage = 0;
IF
구문으로 게시물이 없으면 나머지 데이터를 0으로 초기화
}else {
this.totalPages = (total / 10) + 1;
if(total % 10 == 0) {
this.totalPages = (total / 10);
}
ELSE
전체 페이지는 전체 게시물 수를 10개(한 페이지 당 들어갈 게시물 수)로 나누어 나머지가 0이면 나눈 수로,
나눈 나머지가 0보다 크면 나눈 수에 1을 추가해 10으로 나눈 나머지 게시물이 들어갈 페이지를 만들어 줌
this.startPage = (currentPage / 10) * 10 + 1;
if(currentPage % 10 == 0) {
this.startPage -= 10;
}
시작 페이지는
예를 들어
현재 페이지가 225(int, 10으로 나누었을 때 나머지가 있는 수)라고 가정했을 때,
225 / 10 = 22
22 * 10 = 220
220 + 1 = 221
현재 페이지가 220(10으로 나누었을 때 나머지가 없는 수)라고 가정했을 때,
220 / 10 = 22
22 * 10 = 220
220 + 1 = 221
221 - 10 = 211
this.endPage = this.startPage + (10 - 1);
// 마지막 페이지가 총 페이지보다 클경우 추가
if(this.endPage > this.totalPages) {
this.endPage = this.totalPages;
}
}
}
마지막 페이지는 시작페이지에서 (10 - 1)을 더해주고
만약 마지막 페이지가 총 페이지보다 크다면(게시물이 없는데 페이징처리가 되고 있다면) 총페이지를 마지막페이지와 같게 함
public int getTotal(){
return total;
}
public boolean hasNoBoard(){ // 게시물이 없는 경우, true를 리턴
return total == 0;
}
public boolean hasBoard(){ // 게시물이 있는 경우, true를 리턴
return total > 0
}
전체 게시물 수에 대한 getter
public int getCurrentPage(){
return currentPage;
}
public int getTotalPages(){
return totalPages;
}
public int List<BoardVO> getBoardList(){
return boardList;
}
public int getStartPage(){
return startPage;
}
public int getEndPage(){
return endPage;
}
현재, 전체, 시작, 마지막 페이지와 페이징된 글목록에 대한 getter
'Java 및 JSP' 카테고리의 다른 글
[JSP] MVC 구조에서 서비스와 인터페이스 (0) | 2021.08.21 |
---|---|
[JSP] JSP 파일에서 CSS 파일 적용 시 경로 (0) | 2021.08.20 |
[JSP] DAO 클래스와 VO 클래스 (0) | 2021.08.15 |
[JSP] URL - Pattern(디렉토리 패턴, 확장자 패턴) (0) | 2021.08.14 |
[JSP] MVC1과 MVC2 (0) | 2021.08.13 |