인프런 김영한 강의 정리/실전! Querydsl

[Querydsl] 기본 문법(4) - Case문

백엔드 개발자 - 젤리곰 2024. 8. 9. 20:17
728x90

CASE문은 조건에 따라 다른 값을 반환하는 구문이다.

 

1. 단순한 CASE문

조건이 특정 컬럼 값에 따라 단순하게 매칭될 때는 조건과 반환값을 나열하는 식으로 쓰면 된다.

List<String> result = queryFactory
                .select(member.age
                        .when(10).then("열살")
                        .when(20).then("스무살")
                        .otherwise("기타"))
                .from(member)
                .fetch();

 

▪️ 필드.when(조건).then(반환값).otherwise(조건 외 반환값)

 

2. 복잡한 CASE문

비교 연산자를 쓰거나 여러 조건을 조합해야하는 경우 CaseBuilder를 사용해야한다.

NumberExpression<Integer> rankPath = new CaseBuilder()
                .when(member.age.between(0, 20)).then(2)
                .when(member.age.between(21, 30)).then(1)
                .otherwise(3);

List<Tuple> result = queryFactory
        .select(member.username, member.age, rankPath)
        .from(member)
        .orderBy(rankPath.desc())
        .fetch();

▪️ new CaseBuilder().when(조건).then(반환값).otherwise(조건 외 반환값)

Case문이 길어지기 때문에 변수로 선언해서 쓸 수 있고, select절과 orderBy절에서 함께 사용할 수 있다.

▪️ NumberExpression은 Querydsl에서 숫자와 관련된 표현식을 나타내는 클래스로 Integer, Long, Double등 숫자 타입에 사용할 수 있다.

 

3. 유의할 점

▪️ CASE문으로 가공 vs 애플리케이션 로직에서 처리

데이터를 CASE문으로 가공하는 것이 꼭 필요한지, 애플리케이션 로직에서 처리하는 게 더 나은지 생각해보고 쓰자.

-> 성능, 유지보수성, 데이터 처리량등을 따져봐야된다.

 

728x90