김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

16. 객체지향 쿼리 언어 - 2

경로 표현식.(점)을 찍어서 객체 그래프를 탐색하는 것상태 필드(state field): 단순히 값을 저장하기 위한 필드(ex: m.username)연관 필드: 연관관계를 위한 필드단일 값 연관 필드: @ManyToOne, @OneToOne, 대상이 엔티티(ex: m.team)컬렉션 값 연관 필드: @OneToMany, @ManyToMany, 대상이 컬렉션(ex: m.orders) 특징상태 필드: 경로의 탐색이 끝이난다. 더 이상 탐색 불가능단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색 가능컬렉션 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색 불가능FROM 절에서 명시적 조인을 통해서 별칭을 얻으면 별칭을 통해서 탐색이 가능함. 상대 필드 경로 탐색JPQL..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

15. 객체지향 쿼리 언어 - 1

객체지향 쿼리 언어 소개JPA의 여러 쿼리 방법JPQLJPA CriteriaQueryDSL네이티브 SQLJDBC API 직접 사용(Mybatis, SpringJdbcTemplate) JPQL등장 배경가장 단순한 조회 방법EntityManager.find()객체 그래프 탐색(a.getB().getC())근데, 만약에 나이가 18세 이상인 회원을 모두 검색하고 싶으면..?검색 쿼리를 짜야하는데, 테이블 대상이 아니라 엔티티 객체를 대상으로 검색하는게 객체지향적으로 올바르다. 소개SQL을 추상화하여 JPQL이라는 객체 지향 쿼리 언어를 제공한다.SQL과 문법이 유사(SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원)List result = em.createQuery("sele..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

14. 실전예제6 - 값 타입 매핑

코드@Embeddable public class Address { private String city; private String street; private String zipcode; public Address() { } public Address(String city, String street, String zipcode) { this.city = city; this.street = street; this.zipcode = zipcode; } public String getCity() { return city; } public String getStreet() { return street; } public String getZipcode() { return zipcode; } @Override pu..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

13. 값 타입

기본값 타입JPA의 데이터 타입 분류엔티티 타입@Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능값 타입int, Integer, String처럼 단순히 값으로 사용되는 자바 기본 타입이나 객체식별자가 없고 값만 있으므로 변경시 추적 불가예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류기본 값 타입자바 기본 타입(int, double)래퍼 클래스(Integer, Long)String임베디드 타입(embedded type, 복합 값 타입)컬렉션 값 타입(collection value type) 절대 기본 값 타입을 공유해선 안 돼.int, double같은 기본 타입은 공유 자체가 되지 않는다.In..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

12. 실전예제5 - 연관관계 관리

글로벌 페치 전략 설정모든 연관관계를 지연 로딩으로 바꾸기@ManyToOne, @OneToOne은 기본이 즉시 로딩이므로 지연로딩으로 변경 영속성 전이 설정Order → Delivery를 영속성 전이 ALL 설정Order → OrderItem을 영속성 전이 ALL 설정 코드@Entity public class Category extends BaseEntity { @Id @GeneratedValue private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn private Category parent; @OneToMany(mappedBy = "parent") private List children = new ArrayList(); @ManyToMany(..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

11. 프록시와 연관관계 관리

프록시Member를 조회할 때 Team도 함께 조회를 해야할까??비지니스 로직상 Member를 조회할 때 Team도 같이 필요한 경우에는 조회해야할 것이다.반면, Team이 필요한 경우가 드문 경우에는 Team을 같이 조회하는건 비효율적이다. 프록시 기초em.find() vs em.getReference()em.find(): 데이터베이스를 통해서 실제 엔티티 객체를 조회em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체를 조회 프록시 특징프록시 클래스는 실제 클래스를 상속 받아서 만들어 진다.따라서, 실제 클래스와 겉 모양이 똑같다.타입 체크시 주의 해야한다!==로 비교가 불가능하고, instance of 로 비교해야한다.JPA에서 프록시를 사용하는지 안 하는지 모를테..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

10. 예제4 - 상속관계 매핑

요구사항 추가상품의 종류는 음반, 도서, 영화가 있고 이후 더 확장될 수 있다.모든 데이터는 등록일과 수정일이 필수다. 도메인 모델 도메인 모델 상세테이블 설계 코드@Entity public class Album extends Item { private String artist; private String etc; } @Entity public class Book extends Item { private String author; private String isbn; } @Entity public class Movie extends Item { private String director; private String actor; }@MappedSuperclass public class BaseEntity ..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

9. 고급 매핑

상속관계 매핑관계형 데이터베이스는 상속관계를 갖고 있지 않다.슈퍼타입, 서브타입 관계라는 모델링 기법이 개체 상속과 유사하기 때문에 이 방법을 대신 사용한다. 슈퍼타입, 서브타입 논리모델을 실제 물리 모델로 구현하는 방법조인 전략: 각각 테이블로 변환단일 테이블 전략: 통합 테이블로 변환서브타입 테이블로 변환: 구현 클래스마다 테이블 전략 주요 어노테이션@Inheritance(starategy=InheritanceType.XXX)JOINED: 조인 전략SINGLE_TABLE: 단일 테이블 전략TABLE_PER_CLASS: 구현 클래스마다 테이블 전략@DiscriminatorColumn(name=”DTYPE”)@DiscriminatorValue(”XXX”) 조인 전략각 서브타입의 PK와 슈퍼타입의 PK가 ..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

8. 실습3 - 다양한 연관관계 매핑

배송, 카테고리 엔티티 추가주문과 배송은 1:1(@OneToOne)상품과 카테고리는 N:M(@ManyToMany) ERD 다이어그램 엔티티 상세다대다는 쓰면 안 되지만, 이번 시간에는 한 번 써보기로 하자. 코드@Entity public class Category { @Id @GeneratedValue private Long id; @ManyToOne @JoinColumn private Category parent; @OneToMany(mappedBy = "parent") private List children = new ArrayList(); @ManyToMany @JoinTable private List items; private String name; }@Entity public class Deli..

김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편

7. 다양한 연관관계 매핑

연관관계 매핑시 고려사항 3가지다중성다대일: @ManyToOne일대다: @OneToMany일대일: @OneToOne다대다: @ManToMany다대다는 절대 실무에서 사용하면 안 된다. 단방향, 양방향테이블외래키 하나로 양쪽 조인이 가능하다.따라서, 방향의 개념이 없기 때문에 항상 양방향이다. 객체참조용 필드가 있는 쪽으로만 참조가 가능하다.한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향이다.양방향도 사실 단방향이 2개 있는 것이지만, 논리적으로 양방향으로 취급한다. 연관관계의 주인테이블은 외래키 하나로 두 테이블이 연관 관계를 맺는데, 객체는 그렇게 하지 모 한다.따라서 양방향인 경우, 두 참조에서 어느 값을 업데이트할 때 외래키에 적용할지 설정해야 하는데, 이것이 주인이다. 다대일다대일 단방향가장..

피곤한투티
'김영한 스프링 강의/스프링 ORM 표준 JAP 프로그래밍 - 기본편' 카테고리의 글 목록