JPA/JPQL
[JPQL] 타입 표현과 기타식, 조건식(CASE 등등), 기타 함수
yoon_seon
2023. 4. 25. 21:45
📌 JPQL 타입 표현과 기타식
- 문자 : 'HELLO', 'She"s'
- 숫자: 10L(Long), 10D(Double), 10F(Float)
- Boolean: TRUE, FALSE
- ENUM: jpql.MemberType.Admin(패키지명 포함)
select m.username, 'HELLO', true from Member m
where m.type = jpql.MemberType.ADMIN
// 파라미터 바인딩 경우
String query = "select m.username, 'HELLO', true from Member m " +
"where m.type = :userType";
List<Object[]> result = em.createQuery(query)
.setParameter("userType",MemberType.ADMIN)
.getResultList();
- 엔티티 타입: TYPE(m) = Member(상속 관계에서 사용)
em.createQuery("select i from Item i where type(i) = Book", Item.class);
JPQL 기타
- SQL과 문법이 같은 식
- EXISTS, 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 반환, 다르면 첫번째 값 반환
select NULLIF(m.username, '관리자') from Member ;
📌 JPQL 함수
- CONCAT
- SUBSTRING
- TRIM
- LOWER,UPPER
- LENGTH
- LOCATE
- ABS, SQRT, MOD
- SIZE, INDEX(JPA 용도)
//- SIZE, INDEX(JPA용도)
select SIZE(t.members) from Team t // Team 컬렉션 사이즈, 인덱스 반환
사용자 정의 함수 호출
- 하이버네이트는 사용전 방언에 추가해야 한다.
- 사용하는 DB방언을 상속받고, 사용자 정의 함수를 등록한다. 실제 소스코드내부에 정의되있는 함수들을 참고해서 작성해주면 된다.
//group_concat 이라는 funtion을 등록한다고 가정
public class MyPostgresDialect extends PostgreSQL94Dialect {
public MyPostgresDialect() {
registerFunction("group_concat", new StandardSQLFunction("group_concat", StandardBasicTypes.STRING));
}
}
persistence.xml 수정
//설정파일 등록
<property name="hibernate.dialect" value="jpql.MyPostgresDialect"/>
해당 글은 인프런의 [자바 ORM 표준 JPA 프로그래밍 - 기본편] 강의를 정리한 내용입니다.
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com