728x90
페이지 처리 또는 페이징 처리와 검색
※페이징 처리 기법 X
page에 필요한 객체 → pageDTO
접근 제어자를 private를 해줌으로써 객체에 직접적으로 접근하지 못하게 함. lombok을 사용하면 어노테이션을 이용해서 getter/setter, 생성자를 작성 안해줘도 된다고 하지만, lombok을 제대로 사용해본적이 없으므로
public class PageDTO {
private int pageSize; //글의 개수
private int currentPage; //현재 페이지
private String pageNum;
private int startRow; //시작하는 행 번호
private int endRow; //끝나는 행 번호
private int pageBlock; //한 화면에 보여줄 페이지 개수
private int startPage; //시작 페이지
private int endPage; //끝 페이지
private int count; //전체 글의 개수
private int pageCount; //전체 페이지 개수
private String search; //검색어
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public String getPageNum() {
return pageNum;
}
public void setPageNum(String pageNum) {
this.pageNum = pageNum;
}
public int getStartRow() {
return startRow;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public int getEndRow() {
return endRow;
}
public void setEndRow(int endRow) {
this.endRow = endRow;
}
public int getPageBlock() {
return pageBlock;
}
public void setPageBlock(int pageBlock) {
this.pageBlock = pageBlock;
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
public String getSearch() {
return search;
}
public void setSearch(String search) {
this.search = search;
}
}
Controller
목록이 많은 곳에 작성한다. 예를 들어 게시판이 대표적일 것이다.
@GetMapping("/list")
public String main(HttpServletRequest request, Model model, PageDTO pageDTO) {
System.out.println("BoardController main()");
String search = request.getParameter("search"); //검색어 가져오기
//페이지
int pageSize = 5; //화면에 보여줄 글의 개수
String pageNum = request.getParameter("pageNum");
if(pageNum ==null) {
pageNum = "1";
}
int currentPage =Integer.parseInt(pageNum); //int형 currentPage 변수명에 pageNum을 정수형으로 변경
//pageDTO에 저장
pageDTO.setPageSize(pageSize);
pageDTO.setPageNum(pageNum);
pageDTO.setCurrentPage(currentPage);
pageDTO.setSearch(search);
List<BoardDTO> boardList = boardService.getBoardList(pageDTO); //게시물
int count = boardService.getBoardCount(pageDTO); //전체 글의 개수 구하기
int pageBlock = 5; //한 화면에 보여 줄 페이지 개수 설정
int startPage = (currentPage - 1) / pageBlock * pageBlock + 1; //한 화면에 보여 줄 시작 페이지(1~10 -> 1, 11~20 -> 11,...)
int endPage = startPage + pageBlock - 1; //한 화면에 보여 줄 끝 페이지
int pageCount = count / pageSize + (count%pageSize==0? 0:1); //전체 페이지 개수
if(endPage>pageCount) {
endPage = pageCount;
}
pageDTO.setCount(count);
pageDTO.setPageBlock(pageBlock);
pageDTO.setStartPage(startPage);
pageDTO.setEndPage(endPage);
pageDTO.setPageCount(pageCount);
model.addAttribute("boardList",boardList);
model.addAttribute("pageDTO",pageDTO);
return "board/list";
}
Service
public List<BoardDTO> getBoardList(PageDTO pageDTO) {
System.out.println("BoardService getBoardList()");
//시작하는 행 번호 구하기(currentPage,pageSize)
int currentPage = pageDTO.getCurrentPage();
int pageSize = pageDTO.getPageSize();
int startRow = (currentPage - 1) * pageSize + 1;
int endRow = startRow + pageSize - 1;
pageDTO.setStartRow(startRow - 1);
pageDTO.setEndRow(endRow);
return boardDAO.getBoardList(pageDTO);
}
DAO
public List<BoardDTO> getBoardList(PageDTO pageDTO) {
System.out.println("BoardDAO getBoardList()");
return sqlSession.selectList(namespace+".getBoardList", pageDTO);
}
mapper
<select id="getBoardList" resultType="com.mystory001.domain.BoardDTO">
select *
from board
<if test="search != null">
where `subject` like concat('%',#{search},'%')
</if>
order by `no` desc
limit #{startRow}, #{pageSize}
</select>
728x90
'organize > 스프링' 카테고리의 다른 글
프레임워크, Spring과 Spring Boot (1) | 2024.10.04 |
---|---|
redirect, redirect와 RequestDispatcher (0) | 2024.10.03 |
스프링 프로젝트 정리 1 (0) | 2024.09.18 |
1. 개발을 위한 준비 (0) | 2024.08.27 |
spring(스프링) 프로젝트 생성 (0) | 2024.02.03 |