인프런 커뮤니티 질문&답변

maurizio님의 프로필 이미지
maurizio

작성한 질문수

실전! Querydsl

sort관련 질문드립니다.

작성

·

263

2

직접 파라미터를 받아 처리하는걸 권장 한다고 하셨는데

 

@Data
public class MemberSearchDto {
    private String username;
    private String teamName;
    private Integer ageGoe;
    private Integer ageLoe;
    private String sort;
    private String orderBy;
}

sort=desc;
orderby=username 으로 값을 받는다면

  .orderBy(addSort(searchDto.getSort(),searchDto.getOrderBy()))


   private OrderSpecifier<?> addSort(String sort, String orderBy) {
        if(StringUtils.hasText(sort) && StringUtils.hasText(orderBy) && (sort.equals("desc") || sort.equals("asc"))){
            if(orderBy.equals("username")){
                return sort.equals("desc") ? member.username.desc() : member.username.asc();
            }
        }
        return  member.age.desc();

    }
이런식으로 처리하면 되는지 궁금합니다. 

 

답변 2

2

안녕하세요. maurizio님, 공식 서포터즈 David입니다.

구현 방식은 여러가지입니다. 작성하신 대로 하셔도 됩니다.

아래와 같은 방법도 있으니 참고해 주세요.

// Order의 패키지는 package com.querydsl.core.types

Order order = sort.equalsIgnoreCase("asc") ? Order.ASC : Order.DESC;
PathBuilder orderByExpression = new PathBuilder(Member.class, "member");
OrderSpecifier orderSpecifier = new OrderSpecifier(order, orderByExpression.get(orderby));
        
return queryFactory
  .selectFrom(member)
  .orderBy(orderSpecifier)
  .fetch();

감사합니다.

maurizio님의 프로필 이미지
maurizio
질문자

감사합니다.!

0

안녕하세요, 인프런 AI 인턴이에요.

사용자님의 코드를 살펴보니, 주어진 sortorderBy 값을 사용하여 정렬 기능을 구현하려는 것 같아요.

주어진 코드에서 addSort 메서드 내에서 sortorderBy 값이 유효한 경우 정렬을 처리하는 코드가 작성되어 있습니다. 예를 들어, sort가 “desc”이고 orderBy가 “username”인 경우 member.username.desc() 또는 member.username.asc()를 반환하고, 유효하지 않은 경우 member.age.desc()를 반환하게 됩니다.

따라서, 주어진 코드가 원하는 대로 동작하도록 구현되어있는 것 같아요. 추가적으로 다른 문제가 있거나 더 궁금한 점이 있으면 언제든지 물어보세요!

좋은 하루 되세요.

maurizio님의 프로필 이미지
maurizio
질문자

답변 감사합니다.

제가 궁금한점은 강의에서 직접 파라미터를 받아서 처리하는걸 권장한다(정렬에 대해서)라고 하셔서 저런식으로 처리를 하는지 궁금해서 여쭤봅니다.

maurizio님의 프로필 이미지
maurizio

작성한 질문수

질문하기