JPA

[JPA] 24. JPQL - 타입 표현, 기타식

inuma 2021. 1. 31. 23:01
프로젝트 git url github.com/rtef23/JpaStudy
필요 1. docker
2. docker-compose
프로젝트 정보 mysql : 5.7 - docker image
java : 1.8

 

JPQL 타입 표현

  • 문자
    • 'HELLO'
  • 숫자
    • 10L(Long)
    • 10D(Double)
    • 10F(Float)
  • Boolean
    • TRUE
    • FALSE
  • Enum
    • xxx.xxx.MemberType.ADMIN (패키지 포함)
  • 엔티티 타입
    • TYPE(m) = Member (상속 관계에서 사용)
//[JPQL]
SELECT m.username
     , 'HELLO'
     , TRUE
     , 10L
     , package.to.MemberType.ADMIN
  FROM Member m
 WHERE m.member_type = package.to.MemberType.USER
 
//Item - Book
//     ㄴ Album
//     ㄴ Music
//과 같은 상속 관계
SELECT i
  FROM Item i
 WHERE type(i) = Book

 

기타식

CASE 식

  • 기본 CASE 식
//[JPQL]
SELECT CASE WHEN m.age <= 10 then '학생 요금'
            WHEN m.age >= 60 then '경로 요금'
            else '일반 요금'
        END
  FROM Member m

 

  • 단순 CASE 식
//[JPQL]
SELECT CASE t.name
            WHEN 'teamA' then 'A'
            WHEN 'teamB' then 'B'
            ELSE 'C'
        END
  FROM Team t

 

  • COALESCE : 하나씩 조회해서 null이 아니면 반환
//[JPQL]
SELECT coalesce(m.username, '이름 없는 회원')
  FROM Member m

 

  • NULLIF : 두 값이 같으면 null 반환, 다르면 첫번째 값 반환
//[JPQL]
//m.username이 관리자면 null을 반환 다른 경우, 첫번째 값 반환
SELECT nullif(m.username, '관리자')
  FROM Member m

 

JPQL 기본 함수

  • CONCAT
  • SUBSTRING
  • TRIM
  • LOWER, UPPER
  • LENGTH
  • LOCATE
  • ABS, SQRT, MOD
  • SIZE
//[JPQL]
SELECT SIZE(t.members)
  FROM Team t

 

  • INDEX(JPA 용도)
//[JPQL]
//rownum과 유사
SELECT INDEX(t.members)
  FROM Team t

 

JPQL 사용자 정의 함수

  • Hibernate의 경우, 사용전 방언에 추가해야 한다.
  • 사용하는 DB 방언을 상속받고, 사용자 정의 함수를 등록한다.
//[JPQL]
SELECT function('group_concat', i.name)
  FROM Item i

 

'JPA' 카테고리의 다른 글

[JPA] 26. Fetch 조인 - 기본  (0) 2021.02.11
[JPA] 25. 경로표현식  (0) 2021.02.11
[JPA] 23. JPQL - 조인, 서브 쿼리  (0) 2021.01.31
[JPA] 22. JPQL - 기본 문법 2  (0) 2021.01.27
[JPA] 21. JPQL - 기본 문법 1  (0) 2021.01.26