인프런 김영한 강의 정리/실전! 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