JPA

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 ..

JPA/Base

JPA - 값 타입

✍JPA의 데이터 타입 분류 엔티티 타입 - @Entity - 데이터가 변해도 식별자로 지속해서 추적 가능. 값 타입 - 단순한 값으로 사용하는 자바 기본타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가. - 기본값 타입 (primitive type (int, float..), wrapper class (Integer, Long ..) , String / 임베디드 타입 (복합 값 타입) / 컬렉션 값 타입 - 불변 객체로 만들어야 함. 💡 기본 값 타입 - String, int 등.. - 생명 주기를 엔티티에 의존 - 자바의 primitive 타입은 절대 공유되지 않음. - 기본 타입은 항상 값을 복사. (Side Effect 발생 X) - Integer와 같은 wrapper class, ..

JPA/Base

JPA - 프록시 & 지연로딩, 즉시로딩

✍프록시 기초 em.find(): 데이터베이스를 통해 실제 Entity 객체 조회. em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) Entity 객체 조회. => getReference()를 통해 가져온 객체는 ORM이 만들어낸 프록시엔티티 객체이다. 실제 데이터가 필요한 시점이 오면 DB에 쿼리를 날린다. 💡 프록시 특징 - 실제 클래스를 상속 받아서 만들어진다. - 실제 클래스와 겉 모양이 같다. (내부 데이터는 비어있다.) - 사용하는 입장에서는 이론상 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다. - 프록시 객체는 실제 객체의 참조(target)를 보관한다. 출처 - https://www.inflearn.com/course/ORM-JPA-Basic/das..

JPA/Base

JPA - 상속 관계 매핑

✍상속관계 매핑 관계형 DB는 상속 관계가 없음. 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사. -> 객체의 상속과 DB의 슈퍼타입 서브타입 관계를 매핑 조인 전략 - 상위 테이블과 그를 상속받는 구조의 하위 테이블을 만들고 하위 테이블의 PK, FK를 같도록 설계하여 JOIN으로 두 테이블을 가져오는 전략. 단일 테이블 전략 - 논리 모델을 한 테이블로 합치는 전략. (성능적으로 고려하기도 함 단순해서.) 구현 클래스마다 테이블 전략 - 공통되는 특성을 각 테이블에 추가하여 상위 테이블 개념을 없애는 전략. (중복되는 컬럼 존재.) => JPA는 세가지 전략을 모두 지원. 세 전략은 DB에서 테이블이 어떻게 구성되는지에 따른 차이가 있음. 클래스 설계를 바꿀 필요 없이 전략만 바꿔주면 해..

KAispread
'JPA' 카테고리의 글 목록 (3 Page)