JPA/Base

JPA/Base

JPA - 중급 #3 (다형성 쿼리, 엔티티 직접 사용, Named 쿼리, 벌크연산)

💠 다형성 쿼리 - 조회 대상을 특정 자식으로 한정 EX) Item 중에 하위 클래스인 Book, Movie를 조회하라 ㆍ[JPQL] - SELECT i FROM Item i WHERE type(i) IN (Book, Movie) ㆍ[SQL] - SELECT i FROM i where i.DTYPE in ('B', 'M') 💠 엔티티 직접 사용 - JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용한다. ㆍ[JPQL] SELECT count(m.id) FROM Member m // 엔티티의 아이디를 사용 SELECT count(m) FROM Member m // 엔티티를 직접 사용 - 함수에서 아이디를 사용하던, 엔티티를 직접 사용하던 SQL에서는 Id를 이용하여 데이터를 가..

JPA/Base

JPA - 중급 #2 페치 조인(Fetch Join)

✍페치 조인(Fetch Join) - 실무에서 매우매우매우매우 중요함. - 페치 조인은 SQL 조인 종류가 아님. JPQL에서 성능 최적화를 위해 제공 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능 join fetch 명령어 사용 💠 엔티티 페치 조인 ex) 회원을 조회하면서 연관된 팀도 함께 조회하고 싶을 때 (SQL 한 번에) / 다대일 관계, 일대일 관계 SQL을 보면 회원 뿐만 아니라 팀(T.*)도 함께 SELECT ㆍ[JPQL] - SELECT m FROM Member m join fetch m.team ㆍ[SQL] - SELECT M.*, T.* FROM Member m INNER JOIN TEAM T ON M.TEAM_ID = T.ID - "SELECT m FROM Member..

JPA/Base

JPA - JPQL 중급 #1 (경로 표현식)

✍경로 표현식? - 점을 찍어 객체 그래프를 탐색하는 것. SELECT m.username -> 상태 필드 () FROM Member m JOIN m.team t -> 단일 값 연관 필드 JOIN m.orders o -> 컬렉션 값 연관 필드 WHERE t.name = '팀A' 상태 필드 : 단순히 값을 저장하기 위한 필드 / 경로 탐색의 끝, 탐색 X 연관 필드 : 연관 관계를 위한 필드 ㆍ 단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티 / 묵시적 내부 조인 발생, 탐색 O ㆍ 컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션 / 묵시적 내부 조인 발생, 탐색 X 상태 필드 : m.username -> 에서 더 탐색할 수 없음. 단일 값..

JPA/Base

JPA - JPQL 기본 # 2 (조인, 서브 쿼리, 타입 표현)

✍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/Base

JPA - JPQL 기본 #1 (파라미터 바인딩, 프로젝션 / 조회, 페이징)

✍JPA는 다양한 쿼리 방법을 지원. JPQL 은 객체지향 쿼리 언어, 따라서 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. JPQL은 결국 SQL로 반환된다. 💦 JPQL 문법 - 기본적인 문법은 SQL과 같음. - update 같은 경우에서 한방에 쿼리를 날리는 것을 '벌크 연산'이라고 함. - select m from Member as m where m.age > 18 - 엔티티와 속성은 대소문자 구분O (Member, age) - JPQL 키워드는 대소문자 구문 X (SELECT, FROM, where) - 엔티티 이름을 사용, 테이블 이름 X - 별칭 필수 (as는 생략 가능) TypedQuery = 반환 타입이 명확할 때, Quer..

JPA/Base

JPA - JPQL 개요

✍JPA는 다양한 쿼리 방법을 지원. JPQL - 표준 문법 JPA Criteria - 자바 코드를 짜서 JPQL 로 변환해주는 제네레이터 QueryDSL - 자바 코드를 짜서 JPQL 로 변환해주는 제네레이터 네이티브 SQL - 생 SQL 쿼리 JDBC API를 직접 사용하거나, MyBatis, SpringJdbcTemplate등을 함께 사용할 수 있음 -> JPQL + QueryDSL 에 집중하자. 💦 JPQL QueryDSL 사용 권장. 💠 QueryDSL - 자바 코드로 쿼리를 작성하기 때문에 컴파일러에서 문법 오류를 다 잡아준다. - 문자가 아닌 자바코드로 JPQL을 작성할 수 있음. - JPQL 빌더 역할 - 동적쿼리도 쉽게 들어감. - 단순하고 쉬움. - 실무 사용 권장 🔰 네이티브 SQL ..

KAispread
'JPA/Base' 카테고리의 글 목록