728x90
JPQL 타입 표현
- 문자: 'HELLO', 'She ''s'
- 숫자: 10L(Long), 10D(Double), 10F(Float)
- Boolean: TRUE, FALSE
- ENUM: jpabook.MemberType.Admin (패키지명 포함!)
- 엔티티 타입: TYPE(m) = Member (상속 관계에서 사용)
기타
SQL 문법과 거의 같다고 보면 된다.
따라서 아래 식들도 당연히 사용 가능하다.
- EXIST, IN
- AND, OR, NOT
- = > >= < <= <>
- BETWEEN, LIKE, IS NULL
조건식 - CASE식
기본 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이 아니면 반환
예) 사용자 이름이 없으면 이름 없는 회원을 반환
select coalesce(m.username,'이름 없는 회원') from Member m
NULLIF: 두 값이 같으면 null 반환, 다르면 첫번째 값 반환
예) 사용자 이름이 '관리자'면 null을 반환하고 나머지는 본인의 이름을 반환
select NULLIF(m.username, '관리자') from Member m
JPQL 기본 함수
- CONCAT : 문자를 두 개 더한다.
- SUBSTRING : 문자 잘라낸다.
substring('member',2,3)
- TRIM : 공백 없애준다.
- LOWER, UPPER : 소->대, 대->소문자로 바꾼다.
- LENGTH : 문자의 길이를 반환한다.
- LOCATE : 특정 문자의 위치를 반환한다.
locate('de', 'abcdef')
- ABS, SQRT, MOD : 절댓값, 루트값, 나눈 나머지 반환한다.
- SIZE, INDEX(JPA 용도) (INDEX는 사용하지 않는 것 추천)
사용자 정의 함수 호출
하이버네이트는 사용 전 방언에 추가해야 한다.
사용하는 DB 방언을 상속받고, 사용자 정의 함수를 등록한다.
예)
//Dialect를 만들어라
public class MyH2Dialect extends H2Dialect{
public MyH2Dialect(){
registerFunction("group_concat", new StandartSQLFunction("group_concat", StandardBasicTypes.STRING));
}
}
//jpql문
select function('group_concat', i.name) from Item i
728x90
'💻dev > 🌱Java+Spring' 카테고리의 다른 글
JPA | JPQL 중급 문법 뿌시기 - 페치 조인(fetch join) (0) | 2023.05.04 |
---|---|
JPA | JPQL 중급 문법 뿌시기 - 경로 표현식, 명시적 조인 vs 묵시적 조인 (0) | 2023.05.04 |
JPA | JPQL 문법 뿌시기 - 조인, 서브 쿼리 (0) | 2023.05.04 |
JPA | JPQL 문법 뿌시기 - 프로젝션(SELECT), 페이징 API (0) | 2023.05.03 |
JPA | JPQL 문법 뿌시기 - 기본 문법, 쿼리 API (0) | 2023.05.03 |