✍JPA는 다양한 쿼리 방법을 지원.
예제 모델
💦 JPQL 문법 - JOIN
- 내부 조인 : SELECT m FROM Member m [INNER] JOIN m.team t
Member에 Team이 없으면 해당 데이터 전체가 출력되지 않음. - 외부 조인 : SELECT m FROM Member m LEFT [OUTER] JOIN m.team t
Member에 Team이 없어도 데이터가 출력됨. - 세타 조인 : SELECT count(m) form Member m, Team t where m.username = t.name
연관관계가 없는 테이블을 가져올 때.
🔰 조인 - ON 절
- ON절을 활용한 조인 => 조인 대상 필터링 / 연관 관계 없는 엔티티 외부 조인
🔰 서브 쿼리
- 기존 쿼리문에서 추가적으로 조건을 만들거나 할 때 서브 쿼리를 만들어 사용할 수 있음. 메인 쿼리와 서브 쿼리는 전혀 관계가 없다. (쿼리 안에 쿼리를 넣는 식)
- JPA는 WHERE, HAVING 절에서만 서브 쿼리 사용 가능.
- SELECT 에서도 가능 (Hibernate 에서는)
- FROM 절의 서브 쿼리는 현재 JPQL에서 불가능 -> 조인으로 풀 수 있으면 풀어서 해결
=> SQL에 FROM 절을 쓰는 로직이 필요한 경우, 해당 로직을 애플리케이션 단계에서 처리하자.
🔰 JPQL의 타입 표현
- 문자 : 'HELLO', 'She's'
- 숫자 : 10L(Long), 10D (Double), 10F (Float)
- Boolean : TRUE FALSE
- ENUM : jpabook.MemberType.Admin (패키지명 포함하여 기재.) 파라미터 바인딩을 통해 최소화 가능.
- 엔티티 타입 : TYPE(m) = Member (상속 관계에서 사용)
JPQL 기타
- SQL과 문법이 같은 식
- EXISTS, IN
- AND, OR, NOT
- =, >, >=, <, <=, <>
- BETWEEN, LIKE, IS NULL
🔰 조건식
- COALESCE 괄호 안에 지정한 필드가 null일 경우, 지정된 문자를 반환.
- NULLIF 괄호 안에 지정한 필드가 지정된 값과 같을 경우, Null 반환. 특정 필드를 보호해야 할 때 사용
🔰 JPQL 기본 함수
- CONCAT = 문자열 두개를 더함 ( "select CONCAT('a' , 'b') From Member m" )
- SUBSTRING = 자바에서 제공하는 substring() 과 같음 ( "select SUBSTRING(m.username , 2, 3) From Member m" )
- TRIM = 공백 제거
- LOWER, UPPER = 대소문자로 변환
- LENGTH = 문자의 길이
- LOCATE = 특정 문자의 위치를 반환 / Integer ( "select LOCATE('de', 'abcdeqf') From Member m" )
- ABS, SQRT, MOD = 수학 함수
- SIZE, INDEX(JPA 용도) = SIZE는 컬렉션의 크기를 반환 ( "select size(t.members) From Team t" )
INDEX는 OrderColumn을 사용할 때 index값을 반환.
사용자 정의 함수
- 기본 함수에서 처리할 수 없는 로직일 때 사용.
- DB별 Dialect (방언) 에 따라 여러가지 함수가 존재. 하지만 DB에 종속적이라 사용하는 DB에 따라 함수가 다름.
- DB별로 이미 존재하는 함수를 사용자가 함수 명을 붙여서 사용하는 것.
1. dialect라는 패키지를 따로 만들고, 클래스를 하나 생성하여 사용하는 DB의 Dialect 클래스를 상속받는다.
2. 생성자에 registerFunction 함수를 이용하여 이름과 기능을 지정한다.
3. DB 설정파일인 persistence.xml에 방언 값을 바꿔준다.
4. 사용자 정의 함수를 만들 때, 해당 DB의 Dialect 클래스에서 참조하여 생성하자.
5. Hibernate H2에서 지원하는 함수와 H2에서 지원하는 함수가 달라, 해당 DB의 함수를 확인해 볼 필요가 있음.
본 게시글은 김영한님의 Inflearn 강의를 토대로 제작되었습니다.
https://www.inflearn.com/course/ORM-JPA-Basic/dashboard
자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의
JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런
www.inflearn.com