JPQL PART 2

Shaun·2021년 11월 6일
1

JPA

목록 보기
26/31

JPQL 프로젝션

  • SELECT 절에 조회할 대상을 지정하는 것

  • SELECT m FROM Member m -> 엔티티 프로젝션

  • SELECT m.team FROM Member m -> 엔티티 프로젝션

  • SELECT m.address FROM Member m -> 임베디드 타입 프로젝션

  • SELECT m.username, m.age FROM Member m -> 스칼라 타입 프로젝션

프로젝션 -여러 값 조회

  • select m.username, m.age from Member m
    -> 반환 값 타입을 정하기 애매 하거나 모를때

1. Object[] 타입으로 조회

2. new 명령어로 조회 (Dto로 반환)

  • 단순 값을 DTO로 바로조회
  • 패키지 명을 포함한 전체 클래스 명 입력
  • 순서와 타입이 일치하는 생성자 필요

페이징 API

  • setFirstResult() : 결과로 나올 전체 데이터 중에서의 시작위치

  • setMaxResults(): 조회할 데이터수

Join

1. 내부조인(inner join)

= SELECT m FROM Member m [INNER] JOIN m.team t
= 멤버는 있고 팀이 없을 때 아예 안나온다

2. 외부조인(left outter join)

= SELECT m FROM Member m LEFT [OUTER] JOIN m.team t
= 멤버는 있고 팀이 없을 때 멤버만 나온다

3. 세타조인

= select count(m) from Member m, Team t where m.username =t.name
= 연관관계없는 테이블 비교할때

Join- ON 절

  1. 조인 대상 필터링(조건걸기)

  2. 연관관계 없는 엔티티 외부 조인(하이버네이트 5.1부터

서브쿼리

  • 일반적인 SQL 서브 쿼리와 같다

  • 메인쿼리와 서브쿼리는 서로 전혀 관계가없다. // 메인쿼리에서 서브쿼리로 끌고오면 성능이 잘안나온다

  • JPA는 WHERE, HAVING 절에서만 서브 쿼리 사용가능

  • SELECT 절도 가능

조건식- CASE 식


  • 자바 Switch case 와 매우 흡사

  • 사용법이 쉬우므로 자세한 설명은 생략한다.

1. Coalesce

-> 하나씩 조회해서 null이 아니면 반환

2. nullif

-> 두 값이 같으면 null 반환, 다르면 첫번째 값 반환

JPQL 기본함수

1.기본함수

  • 우리가 써왔던 함수들 기능과 매우 흡사하다

  • DB종석적이라 DB를바꾸면 못쓸수잇다.

2.사용자 정의 함수

  • DB종속적이지만 많은 함수들이 등록 되있다. 제공하지 않은 함수들은 함수를 등록해야한다.

  • 따로 패키지를 만들어서 등록 해줘야한다.

  • 우리가 새로운 함수를 정의하는게 아니고 DB에 원래 있던 함수들을 JPQL에 추가해 주는것임


  • META-INF 수정 필수이다. 해당 클래스 경로를 패키지명 포함 적어준다.

-> 쿼리문에 이런 함수들을 쓸수있다는 점은 전혀 몰랐던 사실이라 신기했다. JPQL 은 기존에 사용했던 쿼리문과 매우 흡사하여 자세한 설명은 생략했다. Spring Data Jpa를 먼저 배우고 다시 뒤로 온 입장으로써 Spring Data Jpa만 알았을 당시의 퍼즐들이 서서히 맞춰지고 채워지는 느낌이든다. 이래서 기초가 중요하구나 또 한번 느꼈다.

profile
호주쉐프에서 개발자까지..

0개의 댓글