똑같은 삽질은 2번 하지 말자

MYSQLでページングをする時 본문

Spring/Spring Boot

MYSQLでページングをする時

곽빵 2020. 4. 10. 13:14
public class PageMaker {
	private CriteriaVO cri;
	private int totalCount;
	private int startPage;
	private int endPage;
	private boolean prev;
	private boolean next;
	private int displayPageNum = 5;

	public CriteriaVO getCri() {
		return cri;
	}
	public void setCri(CriteriaVO cri) {
		this.cri = cri;
	}
	public int getTotalCount() {
		return totalCount;
	}
	public void setTotalCount(int totalCount) {
		this.totalCount = totalCount;
		calcData();
	}
	private void calcData() {
		endPage = (int) (Math.ceil(cri.getPage() / (double)displayPageNum) * displayPageNum);
		//화면 끝 페이지 번호 = (현재 페이지 번호 / 화면에 보여질 페이지 번호의 갯수) * 화면에 보여질 페이지 번호의 갯수
		int tempEndPage = (int)(Math.ceil(totalCount / (double) cri.getPerPageNum()));
		//本当に最後のページの番号 = 총 게시글 수 / 한 페이지당 보여줄 게시글의 갯수
		if(endPage > tempEndPage) {
			endPage = tempEndPage;
		}
		startPage = (endPage - displayPageNum) + 1;
		if(startPage <= 0 ) // totalRecordがdisplayPageNumを満たせない時
			startPage = 1;
		// 화면 첫 페이지 번호
		prev = startPage == 1 ? false : true;
		next = endPage * cri.getPerPageNum() >= totalCount ? false : true;
		System.out.println(startPage + "st0" + endPage);
	}
	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 boolean isPrev() {
		return prev;
	}
	public void setPrev(boolean prev) {
		this.prev = prev;
	}
	public boolean isNext() {
		return next;
	}
	public void setNext(boolean next) {
		this.next = next;
	}
	public int getDisplayPageNum() {
		return displayPageNum;
	}
	public void setDisplayPageNum(int displayPageNum) {
		this.displayPageNum = displayPageNum;
	}
}
public class CriteriaVO {
	private int page; // 現在のページの番号
	private int perPageNum; // ページ当り見える文数
	public int getPageStart() {
		return (this.page-1) * perPageNum;
	}
	public CriteriaVO(){
		System.out.println("Criのコンストラクタ呼出し完了");
		this.page = 1;
		this.perPageNum = 10;
	}
	public int getPage(){
		return page;
	}
	public void setPage(int page) {
		if(page <= 0){
			this.page = 1;
		} else {
			this.page = page;
		}
	}
	public int getPerPageNum(){
		return perPageNum;
	}
	public void setPerPageNum(int pageCount) {
		int cnt = this.perPageNum;
		if(pageCount != cnt) {
			this.perPageNum = cnt;
		} else {
			this.perPageNum = pageCount;
		}
	}
}​
SELECT P.* FROM(SELECT * FROM PRODUCTS ORDER BY PSEQ ASC) AS P
LIMIT 20 OFFSET 5;

元々、Oracleでやったことあったんですけど、今回MySQLつかわなくてはいけなくなりまして、

MySQLのLIMIT OFFSET機能を使って見ました!

LIMITの隣の数字の意味は持ってくるレコードの数でOFFSETは何番目から持ってくるということです。

つまり、五番目から20個持ってくる

Comments