📌 JPQL 타입 표현과 기타식
JPQL 타입 표현
- 문자: ‘HELLO’, ‘She’’s’
- 숫자: 10L(Long), 10D(Double), 10F(Float)
- Boolean: TRUE, FALSE
- ENUM: jpabook.MemberType.Admin (패키지명 포함🌟)
public enum MemberType {
ADMIN, USER
}
member.setType(MemberType.ADMIN)
...
String query = "select m.username, 'HELLO', true From Member m" +
"where m.type = jpql.MemberType.ADMIN"; //패키지명 포함
- 엔티티 타입: TYPE(m) = Member (상속 관계에서 사용)
JPQL 기타
- SQL과 문법이 같은 식
- EXISTS, IN
- AND, OR, NOT
- =, >, >=, <, <=, <>
- BETWEEN, LIKE, IS NULL
📌 조건식(CASE 등등)
기본 CASE 식
단순 CASE 식
정확히 일치하면 ~~ 해라
- COALESCE: 하나씩 조회해서 null이 아니면 반환
- NULLIF: 두 값이 같으면 null 반환, 다르면 첫번째 값 반환
- 사용자 이름이 없으면 이름 없는 회원을 반환 select coalesce(m.username,'이름 없는 회원') from Member m
- 사용자 이름이 ‘관리자’면 null을 반환하고 나머지는 본인의 이름을 반환 select NULLIF(m.username, '관리자') from Member m
member.setUsername(null);
...
String query = "select coalesce(m.username, '이름 없는 회원') from Member m" +
"from Member m";
List<String> result = em.createQuery(query, String.class)
.getResultList();
for(String : result) {
System.out.println("s = " + s);
}
- COALESCE: 하나씩 조회해서 null이 아니면 반환
- 이름 없는 회원 반환 ( username 이 null이므로) ⇒ 있으면 그 값을 반환
member.setUsername("관리자");
...
String query = "select nullif(m.username, '관리자') from Member m" +
"from Member m";
List<String> result = em.createQuery(query, String.class)
.getResultList();
for(String : result) {
System.out.println("s = " + s);
}
- NULLIF: 두 값이 같으면 null 반환, 다르면 첫번째 값 반환
- null로 반환됨
- 숨겨야 할 때 사용?
📌 JPQL 함수
DB가 제공하는 대부분의 함수들은 제공이 되므로 사용할 수 있음
But 등록돼있지 않은 함수들은 등록해야 함.
JPQL 기본 함수
- CONCAT : 문자 2개를 더하는 것
String query = "select concat('a', 'b') From Member m";
//String query = "select 'a' || 'b' From Member m"; //하이버네이트에서 지원
List<String> result = em.createQuery(query, String.class)
.getResultList();
for (String s : result) {
System.out.println("s = " + s);
}
- SUBSTRING
String query = "select substring(m.username,2,3) From Member m";
List<String> result = em.createQuery(query, String.class)
.getResultList();
for (String s : result) {
System.out.println("s = " + s);
}
- TRIM : 공백 제거
- LOWER, UPPER : 대소문자 변환
- LENGTH : 문자 길이
- LOCATE
String query = "select locate('de', 'abcdef') From Member m";
List<String> result = em.createQuery(query, String.class)
.getResultList();
for (String s : result) {
System.out.println("s = " + s);
}
- ABS, SQRT, MOD
- SIZE, INDEX(JPA 용도)
- SIZE : 컬렉션의 크기를 반환
반응형
'Study > JPA' 카테고리의 다른 글
객체지향 쿼리 언어) JPQL - 페치 조인(fetch join) (0) | 2024.07.30 |
---|---|
객체지향 쿼리 언어) JPQL - 경로 표현식 (0) | 2024.07.30 |
조인과 서브쿼리 (0) | 2024.07.27 |
프로젝션과 페이징 (0) | 2024.07.27 |
객체지향 쿼리 언어 소개 (0) | 2024.07.27 |