작성
·
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();
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요.
사용자님의 코드를 살펴보니, 주어진 sort
와 orderBy
값을 사용하여 정렬 기능을 구현하려는 것 같아요.
주어진 코드에서 addSort
메서드 내에서 sort
와 orderBy
값이 유효한 경우 정렬을 처리하는 코드가 작성되어 있습니다. 예를 들어, sort
가 “desc”이고 orderBy
가 “username”인 경우 member.username.desc()
또는 member.username.asc()
를 반환하고, 유효하지 않은 경우 member.age.desc()
를 반환하게 됩니다.
따라서, 주어진 코드가 원하는 대로 동작하도록 구현되어있는 것 같아요. 추가적으로 다른 문제가 있거나 더 궁금한 점이 있으면 언제든지 물어보세요!
좋은 하루 되세요.
감사합니다.!