organize/스프링

페이지 처리

001cloudid 2024. 10. 2. 12:50
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