카테고리 없음

mysql 페이징2

푸곰주 2023. 5. 6. 12:26

select R1.* FROM(
SELECT * FROM tbl_board 
        order by bno desc
) R1
LIMIT 10 OFFSET 0;

 

BoardMapper.xml에  Criteria를 이용하여 적용시켜보자.

 

 

Criteria.java (domain) - DTO 데이터전달용

-int pageNum

-int amount

 

문제점::

 

	<select id="getListWithPaging" resultType="org.moominzero.domain.BoardVO">
		<![CDATA[select R1.* FROM(
			SELECT * FROM tbl_board 
     		   order by bno desc
				) R1
			LIMIT #{amount} OFFSET (#{pageNum}-1) * #{amount};]]>
	
	</select>

 

이런식으로 xml을 작성할경우

테스트

select R1.* FROM( SELECT * FROM tbl_board order by bno desc ) R1 LIMIT 10 OFFSET (2-1) * 10; 

 

구문에서 에러가 난다.       (연산을 못하는듯하다.)

 

 

해결방법

 

criteria 클래스에

skipCount 라는 변수를 선언

 

package org.moominzero.domain;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Getter
@Setter
@ToString
public class Criteria {

	private int pageNum;
	private int amount;
	
	private int skipCount;
	
	
	public Criteria() {
		this(1,10);
	}
	
	public Criteria(int pageNum, int amount) {
		this.pageNum = pageNum;
		this.amount = amount;
		this.skipCount = (pageNum -1) * amount;
	}
	
	public int getSkipCount() {
	        return (this.pageNum - 1) * this.amount;
	 }
	
}

 

 

테스트::

 

	//페이징 테스트
	@Test
	public void testPaging() {
		Criteria cri = new Criteria();
		//10개씩 2페이지
		cri.setPageNum(2);
		cri.setAmount(10);
		
		List<BoardVO> list = mapper.getListWithPaging(cri);
		
		list.forEach(board -> log.info(board));
		
	}

알맞게 실행되었다!

INFO : jdbc.sqltiming - select R1.* FROM( SELECT * FROM tbl_board order by bno desc ) R1 LIMIT 10 OFFSET 10 
 {executed in 129 msec}