본문 바로가기
개발/Spring

[SpringBoot+IntelliJ+Oracle+Thymeleaf+Paging] 웹 게시판 만들기(6) - UTIL (Paging)

by 코딩하는 흰둥이 2023. 4. 20.
반응형

이전글

https://greed-yb.tistory.com/213

 

[SpringBoot+IntelliJ+Oracle+Thymeleaf+Paging] 웹 게시판 만들기(5) - Vo

이전글 https://greed-yb.tistory.com/212 [SpringBoot+IntelliJ+Oracle+Thymeleaf+Paging] 웹 게시판 만들기(4) - Mapper , DB 생성 https://greed-yb.tistory.com/211 [SpringBoot+IntelliJ+Oracle+Thymeleaf+Paging] 웹 게시판 만들기(3) - Service htt

greed-yb.tistory.com

 

 

Criteria
package com.example.practice.util;

public class Criteria {
	// 페이징 기능에서 페이지 번호 출력을 위한 부분
	private int page;			// 현재 페이지 (클릭한 페이지)
	private int perPageNum;		// 페이지 당 글의 게시물 개수
  	
	// mapper 페이징 sql문에서 사용됨.
	private int rowStart;		// 행 시작
	private int rowEnd;			// 행 끝

//	private String cat_id;	// 카테고리 코드
	
	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;
	}
	
	public int getPageStart() 
	{
	    return (this.page - 1) * perPageNum;
	}
	
	public int getPerPageNum() 
	{
	    return this.perPageNum;
	}
	  
	public int getRowStart() 
	{
		return ((page - 1) * perPageNum) + 1;
	}
	
	public int getRowEnd() 
	{
		return getRowStart() + perPageNum - 1;
	}
	
	
	@Override
	public String toString() 
	{
		return "Criteria [page=" + page + ", perPageNum=" + perPageNum + ", "
				+ "getRowStart()=" + getRowStart() + ", getRowEnd()=" + getRowEnd() + "]";
	}
}

 

 

PageMaker
package com.example.practice.util;

import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;

public class PageMaker {

	private int totalCount;
	private int startPage;
	private int endPage;
	private boolean prev;
	private boolean next;
	
	private int displayPageNum = 10;
	
	private Criteria cri;

	public void setCri(Criteria cri) {
		this.cri = cri;
	}

	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
		
		calcData();
	}

	private void calcData() {
		
		endPage = (int) (Math.ceil(cri.getPage() / (double)displayPageNum) * displayPageNum);
		
		startPage = (endPage - displayPageNum) + 1;
		
		int tempEndPage = (int)(Math.ceil(totalCount / (double)cri.getPerPageNum()));
		
		if(endPage > tempEndPage){
			endPage = tempEndPage;
		}
		
		prev = startPage ==1 ? false : true;
		
		next = endPage * cri.getPerPageNum() >= totalCount ? false : true;
		
	}

	public int getTotalCount() {
		return totalCount;
	}

	public int getStartPage() {
		return startPage;
	}

	public int getEndPage() {
		return endPage;
	}

	public boolean isPrev() {
		return prev;
	}

	public boolean isNext() {
		return next;
	}

	public int getDisplayPageNum() {
		return displayPageNum;
	}

	public Criteria getCri() {
		return cri;
	}
	
	public String makeQuery(int page){
		
		UriComponents uriComponents =
	            UriComponentsBuilder.newInstance()
	            .queryParam("page", page)
	            .queryParam("perPageNum", cri.getPerPageNum())
	            .build();	            
		
		return uriComponents.toUriString();
	}

	public String makeSearch(int page){
		
		UriComponents uriComponents =
	            UriComponentsBuilder.newInstance()
	            .queryParam("page", page)
	            .queryParam("perPageNum", cri.getPerPageNum())
	            .queryParam("searchType", ((SearchCriteria)cri).getSearchType())
	            .queryParam("keyword", ((SearchCriteria)cri).getKeyword())
	            .build();	            
		
		return uriComponents.toUriString();
	}	

	
	@Override
	public String toString() {
		return "PageMaker [totalCount=" + totalCount + ", startPage="
				+ startPage + ", endPage=" + endPage + ", prev=" + prev
				+ ", next=" + next + ", displayPageNum=" + displayPageNum
				+ ", cri=" + cri + "]";
	}
	
	
}

현재 코드로는 pageMaker 에 setTotalCount를 하면서 calcData() 메서드를 사용중이다

 

 

 

SearchCriteria
package com.example.practice.util;

public class SearchCriteria extends Criteria{

	private String searchType;
	private String keyword;
	
	public String getSearchType() {
		return searchType;
	}
	public void setSearchType(String searchType) {
		this.searchType = searchType;
	}
	public String getKeyword() {
		return keyword;
	}
	public void setKeyword(String keyword) {
		this.keyword = keyword;
	}
	@Override
	public String toString() {
		return super.toString() + " SearchCriteria [searchType=" + searchType + ", keyword="
				+ keyword + "]";
	}
}

검색이 필요한 경우 사용

변수는 검색하는 내용에 따라 더 생성해서 사용하면 됨

현재는 카테고리 옵션(searchType)과 검색어(keyword) 2가지로 사용

댓글