"인프런 - 자바 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 |