Tools & Libraries/Querydsl

[Querydsl] Querydsl 기본문법 5 (Case 문, 상수 문자 더하기)

대기업 가고 싶은 공돌이 2024. 9. 6. 05:11

Case 문

select, where 절에서 사용 가능

 

간단한 예제

@Test
public void basicCase(){
    JPAQueryFactory queryFactory = new JPAQueryFactory(em);

    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);
    }
}

 

select 절에 10을 열살로, 20을 스무살로 변환해서 가져왔다.

 

복잡한 예제

@Test
public void complexCase(){
    JPAQueryFactory queryFactory = new JPAQueryFactory(em);

    List<String> result = queryFactory.select(new CaseBuilder()
                    .when(member.age.between(0, 20)).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);
    }
}

복잡한 예제는 다음과 같이 CaseBuilder를 사용해야 한다.

 

when then이 아닌 조건문을 사용하는 경우이다.

 

그러나 Case 문은 백엔드에서 사용할 일이 거의 없다.

 

전환하고 바꾸고 보여주는 작업은 DB에서 하는 작업이 아니다.

 

이러한 로직은 프론트 단이나 애플리케이션 단에서 처리해야한다.

 

상수, 문자 더하기

상수 더하기

@Test
public void constant(){
    JPAQueryFactory queryFactory = new JPAQueryFactory(em);

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

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

 

이렇게 Expressions를 통해 상수를 입력해주면

 

그대로 결과 값에 나오게 된다.

 

문자 더하기

@Test
public void concat(){
    JPAQueryFactory queryFactory = new JPAQueryFactory(em);

    List<String> result = queryFactory.select(member.username.concat("_").concat(String.valueOf(member.age)))
            .from(member)
            .where(member.username.eq("member1"))
            .fetch();

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

문자는 concat을 사용해 더한다.

 

그러나 concat은 문자형끼리만 더할 수 있기에 String.valueof 를 통해 숫자형을 문자형으로 바꿔주면 더할 수 있다.

재밌는 점은 자동으로 쿼리에서 value type을 변경해 준다.

 

참고: 김영한 실전! Querydsl