개발/JPA
QueryDsl sort 정렬 기능 추가
nix-be
2024. 1. 18. 23:56
728x90
1. 문제점
- 기존 회사 코드에서 QueryDSL sort 기능의 정렬 오류 발생
- 반복적인 if else 구문 사용으로 인한 유지보수 어려움
2. 개선사항
- 코드 간결화 및 가독성 향상
- if else 구문 제거를 통한 유지보수 용이성 강화
- 정렬 기준 추가 시 간편한 코드 수정 가능
- 기존 예시 코드
final Sort sort = pageable.getSort();
if (sort != null) {
for (Sort.Order sortOrder : sort) {
String property = sortOrder.getProperty();
boolean isAscending = sortOrder.isAscending();
if (property.equals("someProperty1")) {
if (isAscending) {
jpaQuery.orderBy(entity.someProperty1.asc());
} else {
jpaQuery.orderBy(entity.someProperty1.desc());
}
} else if (property.equals("someProperty2")) {
if (isAscending) {
jpaQuery.orderBy(entity.someProperty2.asc());
} else {
jpaQuery.orderBy(entity.someProperty2.desc());
}
}
}
}
- 개선 코드
private OrderSpecifier<?> dynamicSort(Pageable pageable) {
// 실제 엔티티의 QueryDSL 객체를 대입해야 합니다.
QEntity entity = QEntity.entity;
if (pageable.getSort() != null) {
for (Sort.Order order : pageable.getSort()) {
Order direction = order.getDirection().isAscending() ? Order.ASC : Order.DESC;
switch (order.getProperty()) {
case "property1":
return new OrderSpecifier<>(direction, entity.property1);
case "property2":
return new OrderSpecifier<>(direction, entity.property2);
case "property3":
return new OrderSpecifier<>(direction, entity.property3);
// 필요한 만큼 추가적인 속성을 더할 수 있습니다.
default:
// 기본적으로 id로 정렬
return new OrderSpecifier<>(direction, entity.id);
}
}
}
return null;
}
728x90