Programing/JPA

JPA with Springboot, paging, sorting 방법 Pageable, Sort

리커니 2021. 5. 4. 12:19
반응형

Sprincboot JPA paging, sorting 방법 Pageable, Sort

 

Springboot JPA 설정 방법과 Entity mapping 방법은 아래의 Link를 참고하세요.

 

Link : aljjabaegi.tistory.com/561

 

JPA 설정 방법, Guide To JPA with Springboot

JPA 설정 방법, Guide To JPA with Springboot 이전 포스팅에서 JPA를 왜 사용해야 하는지에 대해서 포스팅 했었습니다. Link : aljjabaegi.tistory.com/553 JPA (Java Persistance API) 란? 왜 써야하는가..

aljjabaegi.tistory.com

Link : aljjabaegi.tistory.com/562

 

JPA with Springboot, Entity mapping 데이터 조회 방법

JPA with Springboot, Entity mapping 데이터 조회 방법 이전 포스팅에서 JPA 설정 방법을 알아보았습니다. Link : aljjabaegi.tistory.com/561 JPA 설정 방법, Guide To JPA with Springboot JPA 설정 방법, G..

aljjabaegi.tistory.com

위의 Entity mapping Link의 Service, ServiceImpl, Repository 코드를 활용하기 때문에

Link의 내용을 확인하셔야 아래의 내용을 이해하는데 도움이 되실꺼에요.

 

Paging 처리 방법을 먼저 알아보겠습니다. 

기존에 MemberRepository 에서 JpaRepository를 상속받던 부분을

PagingAndSortingRepository를 상속받게 수정합니다.

 

[MemberRepository Interface]

@Repository
public interface MemberRepository extends PagingAndSortingRepository<Member, String> {

}

 

ServiceImpl에서도 List<Member> 를 리턴받는 것을 Page<Member>를 리턴받게 수정합니다.

그리고 페이징 처리를 위한 기본정보를 map으로 전달받아야 합니다. (firstIdx, lastIdx)

 

[MemberListServiceImpl Interface]

public interface MemberListServiceImpl { 
	Page<Member> getGridList(Map<String, Object> map) throws Exception;
}

 

Service class 에서는 Pageable 정보를 repository의 findAll 메소드 파라메터로 전달합니다. 

 

[MemberListService class - page 정보 추가]

import java.util.Map;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

@Service("memberService") 
public class MemberListService implements MemberListServiceImpl{ 
    @Autowired private MemberRepository repo; 
    
    @Override public List<Member> getMemberList(Map<String, Object> map) throws Exception { 
        int firstIdx = (int) map.get("pageIdex")-1;
        int lastIdx = (int) mape.get("recordCountPerPage");
        Pageable paging = PageReqeust.of(firstIdx, lastIdx);
        return repo.findAll(paging); 
    } 
}

 

테스트를 해보면 해당 index 사이의 값만 출력되는 것을 확인하실 수 있습니다.

 

Sorting 하는 방법은 PageRequest에 정렬할 정보를 전달하시면 됩니다.

아래 예시의 경우 파라메터 Map 에 정렬할 컬럼(ex - id, name, useYn...)과 정렬방식 (asc, desc) 을 전달하여 

해당 컬럼에 대한 정렬을 하게 합니다.

 

[MemberListService class - sort 정보 추가]

import java.util.Map;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;

@Service("memberService") 
public class MemberListService implements MemberListServiceImpl{ 
    @Autowired private MemberRepository repo; 
    
    @Override public List<Member> getMemberList(Map<String, Object> map) throws Exception { 
        int firstIdx = (int) map.get("pageIdex")-1;
        int lastIdx = (int) mape.get("recordCountPerPage");
        Pageable paging = PageRequest.of(firstIdx, lastIdx
            , GetSort.getSort((String) map.get("sortColumn"), (String) map.get("sortOrder")));
        return repo.findAll(paging); 
    } 
}

 

[GetSort - static class]

public class GetSort {
    public static final Sort getSort(String column, String order) {
        Sort sort = null;
        if("asc".equals(order)) {
            sort = Sort.by(column).ascending();
        }else if("desc".equals(order)){
            sort = Sort.by(column).descending();
        }else {
            sort = Sort.by("id").ascending();
        }
        return sort;
    }
}

 

테스트 해보면 정렬된 페이징 정보가 출력되는 것을 확인하실 수 있습니다.

 

Link : aljjabaegi.tistory.com/564

 

JPA with Springboot, 조건 조회, Specification, Predicate, CriteriaBuilder

JPA with Springboot, 조건 조회, Specification, Predicate, CriteriaBuilder 이번 포스팅의 코드는 아래의 Link 들의 코드에 이어 진행됩니다. 아래의 Link를 참고하세요. Link : aljjabaegi.tistory.com/562 JP..

aljjabaegi.tistory.com

 

반응형