페이징을 처음 하나하나 만들었을때는 정말... 어렵다기보단 귀찮고 손이 많이 갔다.
다행히 최근에 알게된 pagehelper를 사용하면 페이징에 필요한 정보를 한번에 간단하게 얻을 수 있게 된다.
아래는 pagehelper를 적용하기 위한 셈플 소스
1. gradle에 추가
|
implementation group: 'com.github.pagehelper', name: 'pagehelper-spring-boot-starter', version: '1.2.10'
|
cs |
2. properties 추가
|
# Pagehelper Setting (사용하는 DB, 페이지 번호의 가능 범위 자동 제한)
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
|
cs |
3. controller
|
@GetMapping(value = "/getPageList")
public PageInfo<GroupCode> getPageList(SearchGrpCodeReqDTO serachDTO) throws Exception {
return new PageInfo<GroupCode>(service.getPageList(serachDTO));
}
|
cs |
4. service
PageHelper.startPage(현재 페이지 번호, 한 페이지에 노출할 row 수);
|
public Page<GroupCode> getPageList(SearchGrpCodeReqDTO reqDTO) throws Exception {
PageHelper.startPage(reqDTO.getPage(), reqDTO.getPageSize());
return (Page<GroupCode>) groupCoceMapper.getPageList(reqDTO);
}
|
cs |
5. mapper
|
public Page<GroupCode> getPageList(SearchGrpCodeReqDTO serachReqDTO) throws Exception ;
|
cs |
6. mapper.xml
|
<select id="getPageList"
parameterType="com.deonggi.bookkeeping.admin.system.grpcd.service.dto.SearchGrpCodeReqDTO"
resultType="com.deonggi.bookkeeping.core.model.entity.GroupCode">
SELECT * FROM GROUP_CODE
ORDER BY CRT_DT ASC
</select>
|
cs |
7. 리턴된 결과
(참고로 GROUP_CODE 테이블의 전체 row 수는 16개다.)
mapper.xml에서는 모든 row를 조회하지만,
pagehelper를 적용하면 실제 list에는 아래 쿼리 조회 결과만 들어 있다.
SELECT * FROM GROUP_CODE
ORDER BY CRT_DT ASC LIMIT 5
쿼리문에 limit 가 추가되어 있는데 이 정보는 위 4번에서 PageHelper.startPage()에 의해 적용되는 정보다.
결과적으로 pagehelper를 적용하면 개발자는 한번의 조회를 위한 코드를 통해 페이징을 위한 모든 정보를 얻을 수 있게 된다.
## pagehelper github의 정보 : github.com/pagehelper/Mybatis-PageHelper
중국어라 왠지 신뢰가 안 갈 수 있지만 상당히 쓸만하다....