본문 바로가기
JPA/Querydsl

Querydsl 06 - Case문, 상수 문자 더하기

by 킹차니 2022. 1. 18.

 

Case문

select, 조건절(where)에서 사용 가능

/*단순한 조건*/
// 10살, 20살, 나머지로 나누기
@Test
void basicCase() {
    List<String> result = queryFactory.select(
            member.age
                .when(10).then("열살")
                .when(20).then("스무슬")
                .otherwise("기타"))
            .from(member)
            .fetch();

    for (String s : result) System.out.println("s = " + s);
}

출력결과:
s = 기타
s = 열살
s = 스무슬
s = 열살
s = 스무슬





/*복잡한 조건*/  /*복잡한 조건에는 CaseBuilder를 사용한다.*/
// 0~20살, 21~30살, 나머지로 나누기
@Test
void complexCase() {
    List<String> result = queryFactory
            .select(new CaseBuilder()
                    .when(member.age.between(0, 10)).then("0~20살")
                    .when(member.age.between(21, 30)).then("21살~30살")
                    .otherwise("기타")
            )
            .from(member)
            .fetch();

    for (String s : result) System.out.println("s = " + s);
}

출력결과:
s = 기타
s = 0~20살
s = 기타
s = 0~20살
s = 기타

물론 case문을 제공하지만 위와 같은 예시는 DB에서 하지 말고 애플리케이션 로직으로 해결하는 것을 권장한다.

 

 

 


 

상수, 문자 더하기

상수가 필요하면 'Expression.constant(xxx)' 사용

@Test
void constant() {
    List<Tuple> result = queryFactory.select(member.username, Expressions.constant("A"))
            .from(member)
            .fetch();

    for (Tuple tuple : result) System.out.println("tuple = " + tuple);
}

출력결과:
tuple = [member5, A]
tuple = [member1, A]
tuple = [member2, A]
tuple = [member3, A]
tuple = [member4, A]

 

@Test
void concat() {
    //username_age 로 하고싶음
    List<String> result = queryFactory
            .select(member.username.concat("_").concat(member.age.stringValue()))
            .from(member)
            .fetch();

    for (String s : result) System.out.println("s = " + s);
}

출력결과:
s = member5_55
s = member1_10
s = member2_20
s = member3_10
s = member4_20

 

참고
member.age.stringValue() 부분이 중요한데, 문자가 아닌 다른 타입들은 stringValue()로 문자로 변환할 수 있다. 이 방법은 ENUM을 처리할 때도 자주 사용한다.

 

 

 

김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.

'JPA > Querydsl' 카테고리의 다른 글

Querydsl 08 - 동적 쿼리  (0) 2022.01.20
Querydsl 07 - 프로젝션과 결과반환  (0) 2022.01.19
Querydsl 05 - 서브쿼리  (0) 2022.01.18
Querydsl 04 - 조인  (0) 2022.01.17
Querydsl 03 - 기본문법(정렬, 페이징, 집합)  (0) 2022.01.17