본문 바로가기
  • 개발공부 및 일상적인 내용을 작성하는 블로그 입니다.
JPA

JPQL - JPQL 기본(9)

by 방구석 대학생 2020. 11. 24.

"인프런 - 자바 ORM 표준 JPA 프로그래밍 강의를 듣고 작성한 글 입니다."

www.inflearn.com/course/ORM-JPA-Basic#

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런

JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다. 초급 웹 개발 프로그

www.inflearn.com

 

 

JPQL 기본함수

- LOWER, UPPER

LOWER : 전체 문자열에서 대문자로 되어 있는 글자를 모두 소문자로 바꾸는 함수이다.

예시 :

  • LOWER('Germany') -> 'germany'.

UPPER : 전체 문자열에서 소문자로 되어 있는 글자를 모두 대문자로 바꾸는 함수이다.

예시 :

  • UPPER('Germany') is evaluated to 'GERMANY'.

 

- LENGTH

전체 문자열의 길이를 반환해주는 함수이다.

예시 :

  • LENGTH('United States') -> 13.
  • LENGTH('China') -> 5.

 

- LOCATE

전체 문자열에서 지정해준 글자가 몇번째에 위치해 있는지 알려주는 함수이다.

결과로 숫자를 반환하는 표준 함수이기 때문에 List 의 반환값 타입을 Integer 로 설정해야 한다.

- JpaMain.java

String query = "select locate('de', 'abcdefg') From Member m";

List<Integer> result = em.createQuery(query, Integer.class)
	.getResultList();
for(Integer s : result){
	System.out.println("s = " + s);
}

- Hibernate SQL

Hibernate: 
    /* select
        locate('de',
        'abcdefg') 
    From
        Member m */ select
            locate('de',
            'abcdefg') as col_0_0_ 
        from
            Member member0_
s = 4

 

 

- ABS,SQRT, MOD

수학적인 계산값을 반환받는 함수의 경우 아래의 링크를 참조하면 자세하게 확인이 가능하다.

www.objectdb.com/java/jpa/query/jpql/arithmetic

 

Arithmetic in JPA JPQL/Criteria Queries (ABS,MOD,SQRT, +,-,*,/)

Numeric values may appear in JPQL queries in many forms: as numeric literals - e.g. 123, -12.5. as parameters - when numeric values are assigned as arguments. as path expressions - in navigation to persistent numeric fields. as aggregate expressions - e.

www.objectdb.com

 

- ABS

함수 내부에서 지정한 숫자 값의 절대값을 반환해주는 함수이다.

예시 :

  • ABS(-5) -> 5
  • ABS(10.7) ->10.7

- SQRT

함수 내부에서 지정한 숫자 값의 제곱근 값을 반환해주는 함수이다.

예시 :

  • SQRT(9) is evaluated to 3
  • SQRT(2) is evaluated to 1.414213562373095

- MOD

함수 내부에서 지정한 두 숫자 값을 나눈 나머지를 반환해주는 함수이다.

예시 :

  • MOD(11, 3) is evaluated to 2 (3 goes into 11 three times with a remainder of 2)
  • MOD(8, 4) is evaluated to 0 (4 goes into 8 twice with a remainder of 0)

 

- SIZE, INDEX(JPA 용도)

- SIZE : 컬렉션의 크기를 반환해주는 함수이다.

SIZE 함수의 경우 강의에서 나온 함수 형태와는 다르게 사용하였다.

강의 : size(t.members) -> 이와 같이 사용했을 경우 for 문에서 캐스트 오류가 발생하였다. (Object -> Integer (x))

즉, 강의에서 사용한 함수의 반환값으로 Integer 값이 아닌  Object, 객체 값이 돌아왔다는 뜻이다.

그렇기에 위와 같은 문제를 아래와 같은 코드로 바꿔서 해결하였다.

size(t.members) -> t.members.size

 

- JpaMain.java

String query = "select t.members.size From Team t";
List<Integer> result = em.createQuery(query, Integer.class)
	.getResultList();
for(Integer s : result){
	System.out.println("s = " + s);
}

- Hibernate SQL

Hibernate: 
    /* select
        t.members.size 
    From
        Team t */ select
            (select
                count(members1_.TEAM_ID) 
            from
                Member members1_ 
            where
                team0_.id=members1_.TEAM_ID) as col_0_0_ 
        from
            Team team0_
s = 0 /*팀 객체에 어떠한 데이터 값도 들어와 있지 않다.*/

 

- INDEX

일반적으로 쓸 수 있는건 아니고, @OrderColumn 어노테이션을 사용할 때가 있다.(쓰는 걸 추천하지 않는다고 한다.)

값 타입의 List 컬렉션 에서 옵션을 줘서 쓸 수 있는데, 컬렉션에서 위치 값을 알아내야 할 때 쓸 수 있다.

* 추천하지 않는 이유?

: 중간에 데이터가 빠지는 일이 생기면 해당 위치에 null 값이 들어올 수 있기 때문에 되도록이면 쓰지 않는 것을 추천한다.

예시 :

String query = "select index(t.members) From Team t";

 

 

다음 번 글에서는 사용자 정의 함수에 대해 알아보자.

'JPA' 카테고리의 다른 글

JPQL - 경로 표현식  (0) 2020.11.28
JPQL - JPQL 기본(10)  (0) 2020.11.24
JPQL - JPQL 기본(8)  (0) 2020.11.24
JPQL - JPQL 기본(7)  (0) 2020.11.23
JPQL - JPQL 기본(6)  (0) 2020.11.16