Paging처리를 위해 직접 구현할 수 있지만 DB마다 쿼리를 다르게 적용해야 하고 Paging처리를 위한 전체 페이지, 현재 페이지 등을 계산하는 로직까지 구현해야 한다.
MyBatis를 사용한다면 PageHelper를 이용하여 간편하게 Paging처리를 구현할 수 있다.
PageHelper는 Mybatis를 사용할 때 Paging처리를 도와주는 오픈소스이다.
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
pagehelper:
helper-dialect: oracle # DB 종류
reasonable: true # true 일시 0 <= pageNum <= pages 로 실행
support-methods-arguments: true # true이면 mapper에서 page parameter 사용가능
spring:
main:
allow-circular-references: true # 순환 참조
Error creating bean with name 'com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration': Requested bean is currently in creation: Is there an unresolvable circular reference?
PageHelper를 사용하기 위해 설정하다 해당 오류를 만나게 되면 allow-circular-references 순환 참조 옵션을 true로 설정한다. Spring Boot 버전에 따라 기본값이 다르기 때문이다.
Spring Boot 기본값
PageInfo<User> page = PageHelper.startPage(pageNum, pageSize)
.doSelectPageInfo(() -> userMapper.selectUser());
log.info("TotalCount : {}, CurrentPage : {}, PageSize : {}, TotalPage : {}", page.getTotal()
, page.getPageNum()
, page.getPageSize()
, page.getPages());
List<User> userList = page.getList();
PageInfo.java
// 현재 페이지
private int pageNum :
// 페이지당 Row 수
private int pageSize ;
// 현재 페이지 수
private int size ;
// 현재 페이지의 첫 번째 요소가 데미터베미스에 있는 줄 번호
private long startRow ;
// 현재 페이지의 마지막 요소가 데미터베미스에 있는 줄 번호
private long endRow ;
// 전체 페이지 수
private int pages ;
// 이전 페이지
private int prePage ;
// 다음 페이지
private int nextPage ;
// 첫 페이지인지 며부
private boolean isFirstPage = false ;
// 마지막 페이지인지 며부
private boolean isLastPage = false ;
// 이전 페이지가 있는지 며부
private boolean hasPreviousPage = false ;
// 다음 페이지가 있는지 며부
private boolean hasNextPage = false ;
// 내비게미션 페이지 번호
private int navigatePages :
// 모든 내비게미션 페이지 번호
private int [ ] navigatepageNums ;
// 내비게미션 바의 첫 페이지
private int navigateFirstPage ;
// 내비게미션 바의 마지막 페이지
private int navigateLastPage ;
SELECT
*
FROM DEV_USER
SELECT * FROM ( SELECT TMP_PAGE.*, ROWNUM PAGEHELPER_ROW_ID FROM (
SELECT
*
FROM DEV_USER
) TMP_PAGE) WHERE PAGEHELPER_ROW_ID <= 2 AND PAGEHELPER_ROW_ID > 0
Optional 사용에 대한 고찰 (사용목적, 메서드, 주의사항) (0) | 2024.09.06 |
---|---|
[JAVA] LocalDate (날짜와 시간) 내일, 월말, 월초, 년말, 년초, 윤년 구하기 (0) | 2024.08.27 |
[JAVA] - Iterator란 (27) | 2024.03.16 |
[JAVA] 스트림(Stream) 중간연산, 최종연산 메소드 - (2) (31) | 2024.02.12 |
[JAVA] 스트림(Stream)이란 - (1) (66) | 2024.01.20 |
댓글 영역