Querydsl에서 사용하는 Case(when, then), Coalesce(IFNULL), Concat(문자열 붙이기) 알아보기 ( Querydsl / Java )
🌜 Database

Querydsl에서 사용하는 Case(when, then), Coalesce(IFNULL), Concat(문자열 붙이기) 알아보기 ( Querydsl / Java )

안녕하세요. 그린주입니다 ๑'ٮ'๑

오늘도 힘차게 시작해보겠습니다!

 

개요

이번 글에서는 Querydsl에서 사용하는 Case(when, then), Coalesce(IFNULL), Concat(문자열 붙이기)에 대해 공유해드리겠습니다. 


목차

Case(when, then)

Coalesce(IFNULL)

Concat(문자열 붙이기)


Case(when, then)

JPA에서 지원하는 내용과 동일하게 지원하며 select, where 절에서 사용 가능합니다.

단순한 조건은 when(), then() 메서드 호출로 간단하게 구현할 수 있고 복잡할 경우 CaseBuilder를 사용합니다.

 

단순 case 예제

.select(
	student.name,
    	student.age,
    	student.age.when(8).then("1학년")
    	.when(9).then("2학년")
    	.when(10).then("3학년")
    	.when(11).then("4학년")
    	.when(12).then("5학년")
    	.otherwise("6학년").as("memo")
    )
.from(student)
.fetch();

 

CaseBuilder 예제

.select(
	member.name,
	member.age,
	new CaseBuilder()
	.when(member.age.lt(8)).then("유치원생")
	.when(member.age.lt(14)).then("초등학생")
	.when(member.age.lt(17)).then("중학생")
	.when(member.age.lt(20)).then("고등학생")
	.otherwise("대학생").as("memo")
    )
.from(member)
.fetch();

  new CaseBuilder() 

 

Case when 문법 시작

 

 

  .when(조건) .then(값).otherwise(값)

 

when절이 true일 경우 .then()가 실행, when절이 모두 false일 경우 .otherwise()가 실행

 

 

  .as(필드명)

 

결과물의 필드명 지정

* alis(as)를 하지 않으면 결과물 필드의 이름을 알 수 없기 때문에 오류가 발생합니다.


728x90

coalesce(IFNULL)

각 DB 별로 null을 처리하는 함수가 있는데 Querydsl도 null을 처리하는 coalesce() 함수가 있습니다.

 

coalesce를 사용하기 전 주의사항 두 가지가 있습니다.

1. oracle에서는 empty string가 null로 변경됩니다.

2. as는 반드시 있어야 합니다. *alis(as)를 하지 않으면 결과물 필드의 이름을 알 수 없기 때문에 오류가 발생합니다.

 

아래는 회원명이 null일 경우 null을 반환하지 않고 "이름 없음"으로 반환하는 예제입니다.

.select(
	member.name.coalesce("이름없음").as("name")
    )
.from(member)
.fetch();

 


concat(문자열 붙이기)

select 한 결과에 문자열을 더해줘야 할 때 사용합니다.

 

concat를 사용하기 전 주의사항이 있습니다.

1. String 이외의 요소는 .stringValue()를 사용하여 해당 요소를 String으로 바꿔주어야 합니다.

 

아래는 "회원명(나이) : 연락처"로 출력하는 예제입니다.

.select(
	member.name.concat("(").concat(member.age.stringValue()).concat(") : ").concat(member.phone)
    )
.from(member)
.fetch();
728x90

마무리

이렇게 Querydsl에서 사용하는 Case(when, then), Coalesce(IFNULL), Concat(문자열 붙이기)에 대해 적어보았습니다.
다들 성공하셨을까요?? 끝까지 파이팅입니다!


긴 글 봐주셔서 감사합니다!
오늘도 행복한 하루 보내세요 '◡'✿


참고

https://jaime-note.tistory.com/74
https://mycup.tistory.com/295

https://devkingdom.tistory.com/252

https://querydsl.com/static/querydsl/4.1.4/apidocs/com/querydsl/core/types/dsl/CaseBuilder.html


728x90
728x90