예제
설명 : tag가 포함된 Item 리스트를 검색하고 order에 맞는 OrderBy를 수행한다.
tag가 null이면 where절이 무시되고 order가 null이면 등록일자(내림차순)으로 정렬된다.
public List<Item> findItemList(String tag, String order) {
BooleanBuilder builder = new BooleanBuilder();
if (StringUtils.hasText(tag)) {
builder.and(tag.title.eq(tag));
}
return queryFactory.selectFrom(item)
.leftJoin(item.tags, tag)
.where(builder)
.orderBy(itemSort(order))
.fetch();
}
private OrderSpecifier<?> itemSort(String order) {
if ("popular".equals(order)) {
return item.rating.desc();
}
return item.enrolledDateTime.desc();
}
BooleanBuilder
OrderSpecifier<>
내용 추가 예정