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
'인프런 김영한 강의 정리 > 실전! Querydsl' 카테고리의 다른 글
[Querydsl]기본 문법(3) - 서브 쿼리 (0) | 2024.08.09 |
---|---|
[Querydsl] 기본 문법(2) - 조인 (0) | 2024.08.08 |
[Querydsl] fetchResults(), fetchCount() 대체하기 (0) | 2024.08.07 |
[Querydsl] 기본 문법(1) - JPQL과 차이, 조회 (0) | 2024.08.06 |
프로젝트 환경설정 (SpringBoot 3.x 버전), Querydsl 설정 (0) | 2024.07.27 |