QueryDSL에서 동적정렬처리
QueryDSL에서 PageRequest를 이용하여 OrderBy를 처리할 수 있다.
- PageRequest를 작성한다.
- PageRequest에서 정렬방향(getDirection), OrderBy할 컬럼(getProperty)을 뽑아서 OrderSpecifier[]로 리턴한다.
//Service Layer
public List<UserDto> selectAllUser(){
PageRequest pageRequest = PageRequest.of(0, 30, Sort.Direction.DESC, "seq");
List<UserDto> listUserDto = new ArrayList<>();
querydslUserRepository.findUsertbl(pageRequest).stream().forEach(u ->{
listUserDto.add(new UserDto(u));
});
return listUserDto;
}
//Persistence Layer - QueryDSL Query 구성부분
public List<User> findUsertbl(Pageable pageable){
return queryFactory
.selectFrom(user)
.orderBy(orderSpecifiers(pageable))
.fetch();
}
private OrderSpecifier[] orderSpecifiers(Pageable pageable){
return pageable.getSort()
.map(order -> new OrderSpecifier(Order.valueOf(order.getDirection().name())
, Expressions.path(User.class, user, order.getProperty())))
.toList()
.toArray(new OrderSpecifier[0]);
}