본문 바로가기
Study/JPA

JPQL

by _비니_ 2024. 7. 27.

📌 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 : 컬렉션의 크기를 반환
반응형