오봉이와 함께하는 개발 블로그
JPA - JPQL 타입 표현과 기타식, 조건식 본문
728x90
JPQL 타입 표현
- 문자 : 'HELLO', 'She''s'
- 작은 따옴표 하나더 표현하려면 '' 두 개 연달아서 사용
- "SELECT m.username, 'HELLO', true FROM Member m"
- 숫자 : 10L(Long), 10D(Double), 10F(Float)
- Boolean : TRUE, FALSE
- "SELECT m.username, 'HELLO', TRUE FROM Member m"
- ENUM : jpabook.MemberType.Admin (패키지명 포함)
- "SELECT m.username, 'HELLO', true FROM Member m where m.type = jpql.MemberType.ADMIN"
- 파라미터 바인딩 가능
- "SELECT m.username, 'HELLO', true FROM Member m where m.type = :userType"
- .setParameter("userType", MemberType.ADMIN)
- 엔티티 타입 : TYPE(m) = Member (상속 관계에서 사용)
- Item 엔티티 하위에 Book, Movie, Album 이라는 하위 엔티티가 있는 경우를 가정
- em.createQuery("SELECT i FROM Item i WHERE TYPE(i) = Book", Item.Class)
JPQL 기타
- SQL과 문법이 같은 식
- EXISTS, IN
- AND, OR, NOT
- =, >, >=, <, <=, <>
- BETWEEN, LIKE, IS NULL
- "SELECT m.username, 'HELLO', true, FROM Member m WHERE m.username IS NOT NULL"
- "SELECT m.username, 'HELLO', true, FROM Member m WHERE m.age BETWEEN 0 AND 10"
조건식
- 기본 CASE 식
- 범위에 대해 조건을 만들 수 있다.
select
case when m.age <= 10 then '학생요금'
when m.age >= 60 then '경로요금'
else '일반요금'
end
from Member m
- 단순 CASE 식
- 조건을 정확히 딱 맞게 구현할 수 있다.
select
case t.name
when '팀A' then '인센티브110%'
when '팀B' then '인센티브120%'
else '인센티브105%'
end
from Team t
- COALESCE : 하나씩 조회해서 null이 아니면 컬럼에 들어있는 값 반환
- 사용자 이름이 없으면(null이면) 이름 없는 회원을 반환
- select coalesce(m.username,'이름 없는 회원') from Member m
- 사용자 이름이 없으면(null이면) 이름 없는 회원을 반환
- NULLIF : 두 값이 같으면 null 반환, 다르면 첫번째 값 반환
- 사용자 이름이 '관리자'면 null을 반환하고 나머지는 본인의 이름을 반환
- select NULLIF(m.username, '관리자') from Member m
- 사용자 이름이 '관리자'면 null을 반환하고 나머지는 본인의 이름을 반환
출처 : 인프런 김영한 지식공유자님의 스프링 부트와 JPA 실무 완전 정복 로드맵 강의
728x90
'BE > JPA' 카테고리의 다른 글
JPA - 경로 표현식 (0) | 2022.07.01 |
---|---|
JPA - JPQL 함수 (0) | 2022.06.30 |
JPA - 조인, 서브 쿼리 (0) | 2022.06.30 |
JPA - 페이징 (0) | 2022.06.30 |
JPA - 프로젝션(select) (0) | 2022.06.30 |
Comments