Spring/[인프런 김영한 자바 ORM 표준 JPA 프로그래밍 - 기본편]

JPQL경로 표현식경로 표현식 : .을 찍어서 객체 그래프를 탐색하는 것select m.username from Member m join m.team t join m.orders o where t.name = '팀A'm.username => 상태 필드m.team => 단일 값 연관 필드 (1:N관계에서 N이 가지고 있는 객체)m.orders => 컬렉션 값 연관 필드 (1:N관계에서 1이 가지고 있는 컬렉션) 경로 표현식 용어상태 필드: 단순히 값을 저장하기 위한 필드경로 탐색의 끝으로 더이상 탐색 x연관 필드 : 연관관계를 위한 필드단일 값 연관 필드 -> @ManyToOne, @OneToOne, 대상이 엔티티묵시적 내부 조인 발생, 탐색 Oex) select m.team from Member m 이렇..
객체지향 쿼리 언어JPA에서 지원하는 다양한 쿼리 방법JPQLJPA CriteriaQueryDSL네이티브 SQLJDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용JPQL (Java Persistence Query Language)// JPQL 사용 예시List result = em.createQuery( "select m from Member m where m.name like '%kim%'" , Member.class).getResultList();for (Member member : result) { System.out.println("member = " + member);}JPA를 사용하면 엔티티 객체를 중심으로 개발하고 검색한다.모든 DB 데이터를 객체로 변환..
값 타입JPA의 데이터 타입 분류엔티티 타입: @Entity로 정의하는 객체데이터가 변해도 식별자로 지속해서 추적 가능하며 값이 공유가 가능하다.값 타입 : int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체식별자가 없고 값만 있기에 변경 시 추적 불가하며 생명 주기가 엔티티에 의존하며 값을 공유하지 않는 것이 안전하다.값을 공유하는 경우 참조 값이 아닌 값만 복사해서 사용하거나 불변 객체로 만드는 것이 안전하다. 값 타입 분류기본 값 타입자바 기본 타입 - int, double ...래퍼 클래스 - Integer, Long ...String임베디드 타입(복합 값 타입): 좌표 (x,y)와 같이 JPA에서 직접 정의해서 사용해야 하는 타입컬렉션 값 타입 : 자바 컬..
프록시em.find() vs em.getReference()em.find() : 데이터베이스를 통해 실제 엔티티 객체 조회em.getReference() : 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회getReference()를 호출하는 시점에는 DB에 쿼리를 날리지 않는다.실제 데이터를 조회하는 시점에 DB에 쿼리를 날린다.영속성 컨텍스트에 찾는 엔티티가 존재하면 em.getReference()를 호출해도 실제 엔티티가 반환된다. 프록시 특징실제 클래스를 상속받아서 만들어진다.타입 체크 시 == 비교가 아닌 instanceof를 사용해서 비교해야한다.실제 클래스와 겉 모양이 같다.사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다.프록시 객체는 실제 객체의 참조..
상속관계 매핑관계형 데이터베이스는 상속 관계X슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다. 상속관계 매핑 : 객체의 상속과 구조와 DB의 슈퍼타입 - 서브타입 관계를 매핑하는 것. 슈퍼타입 - 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법각각 테이블로 변환 => 조인 전략통합 테이블로 변환 => 단일 테이블 전략서브타입 테이블로 변환 => 구현 클래스마다 테이블 전략모든 방법은 객체는 상속을 지원하기 때문에 객체 입장에서는 다 같다. 조인 전략 : 각 테이블을 구성하고 필요한 경우 조인을 통해 데이터를 가져오는 방식.ex) 부모 테이블과 자식 테이블을 따로 만들어서 FK를 통해 필요한 데이터는 JOIN을 통해서 가져오는 방식이며 ITEM 부모 테이블에서는 NAME, PRICE ..
연관관계 매핑테이블에서의 매핑외래 키 하나로 양쪽 조인이 가능하기에 방향 개념이 없다.객체에서의 매핑참조용 필드가 있는 쪽으로만 참조가 가능하다한쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향(단방향 2개)이다. 객체에서 양방향의 경우 참조가 두 군데 있기 때문에 테이블 외래 키를 관리할 곳(연관관계 주인)을 지정해야한다.연관관계 주인 : 외래 키를 관리하는 참조주인 반대편 : 외래 키에 영향을 주지 않고 단순 조회만 가능하다.다대일 관계 (N:1)다대일 관계 (N:1) 단방향가장 많이 사용하는 연관관계N 쪽에서 외래키를 관리하는 경우이다.다대일(N:1)의 반대는 일대다(1:N)이다.다대일 관계 (N:1) 양방향외래 키가 있는 쪽이 연관관계의 주인이다. => N 쪽이 연관관계의 주인양쪽을 서로 참조할..
연관관계 매핑객체를 테이블에 맞춰 설계하는 경우 - 객체를 데이터 중심으로 설계하면 협력 관계를 만들 수 없다.테이블은 외래 키로 조인을 해서 연관된 테이블을 찾는다.객체는 참조를 사용해서 연관된 객체를 찾는다.단방향 연관관계@Entitypublic class Member { //내용 생략 @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; ...}단방향 연관관계 예제Team과 Member가 1:N 관계라고 가정할 때객체는 참조를 사용하기 때문에 Team 객체를 Member에 포함Team과 Member는 일대다 관계이기 때문에 Team 객체에 @ManyToOne으로 명시@JoinColumn(name = "외래키명")으로 외래 키와 매핑해..
엔티티 매핑엔티티 매핑객체와 테이블 매핑 : @Entity, @Table필드와 컬럼 매핑 : @Column기본 키 매핑 : @Id연관관계 매핑 : @ManyToOne, @JoinColumn객체 - 테이블 매핑@Entity : @Entity가 붙은 클래스는 JPA가 관리하는 엔티티이다.JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수기본 생성자 필수 생성final 클래스, enum, interface, inner 클래스에는 @Entity를 붙일 수 없다.저장할 필드에 final 사용 x@Entity 속성name : JPA에서 사용할 엔티티 이름을 지정한다.기본값은 클래스명으로 같은 클래스명이 없으면 가급적 기본값으로 사용 @Table : 엔티티와 매핑할 테이블을 지정한다. @Table과 @En..
영속성 관리JPA에서 가장 중요한 것객체와 관계형 데이터베이스 매핑하기영속성 컨텍스트 EntityManagerFactory와 EntityManager 동작 방식EntityManagerFactory는 애플리케이션 / DB 당 1개만 생성된다.EntityManagerFactory가 클라이언트에게 요청이 들어올 때마다 EntityManager를 생성한다.EntityManager는 커넥션 풀을 통해 DB에 접근한다.영속성 컨텍스트 (Persistence Context)영속성 컨텍스트 : 엔티티를 영구 저장하는 환경영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않는다.애플리케이션과 DB 사이에 존재하는 중간 계층과 같은 역할EntityManager를 통해서 영속성 컨텍스트에 접근한다.EntityManager 안..
JPA 설정Maven : 자바 라이브러리 빌드 관리 툴이다.라이브러리 자동 다운로드 및 의존성 관리를 해준다.최근에는 Gradle을 더 많이 사용하는 추세이다. Maven 빌드를 사용하는 경우porm.xml에 필요한 라이브러리를 추가해준다. JPA 설정하기 - persistence.xml/resources/META-INF/persistence.xml 위치persistence-unit name으로 이름 지정javax.persistence로 시작: JPA 표준 속성hibernate로 시작: 하이버네이트 전용 속성Database 관련 속성과 옵션을 지정한다. JPA는 특정 데이터베이스에 종속되지 않는다.방언 : SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능 데이터베이스 방언특정 데이터베이스에 맞..
h2boom
'Spring/[인프런 김영한 자바 ORM 표준 JPA 프로그래밍 - 기본편]' 카테고리의 글 목록