JPA 5

JPA_DataSource

Connection Pool 싱글톤 패턴이라고도 할 수 있는데 Db Connection을 만들어놓고 해당 Connection을 사용할 수 있도록 관리하는 것 즉, 여러 개의 Db Connection을 생성하지 않아도 되기 때문에 성능 측면에서 효율적 DataSource DB와의 연결을 미리 생성하고, 그것을 관리하는 역할을 하는 객체 DB Connection을 관리하는 인터페이스 Connection을 획득하는 방법을 추상화한 인터페이스 Connection Pool을 사용하기 위한 인터페이스 getConnection()를 지원해서 DB연결하려는 객체에게 Connection을 주고 다 쓰면 반납함 public BoardResponseDto(JdbcTemplate template) { ///... } 위의 코..

JPA 2023.10.17

JPA_값 타입

값 타입 분류 기본 값 타입 자바 기본 타입(int,double…) 래퍼(Wrapper)클래스(Integer,Long) String 임베디드 타입 컬렉션 값 타입 임베디트 타입 새로운 값 타입을 직접 정의할 수 있음 기본 값 타입을 모아서 만들어서 복합값 타입이라고 함 위의 사진에서 Member라는 엔티티 안에서 Period, Address라는 객체를 새로 만들어서 아래의 코드 처럼 객체 선언 public class Member{ ... //임베디드 타입 private Period workPeriod; private Address homeAddress; } 임베디드 타입 사용법 @Embeddable → 값 타입을 정의하는 곳에 표시 @Embeddable public class Period{ private..

JPA 2023.10.05

JPA_프록시와 연관관계관리

프록시와 연관관계 관리 📒 em.find() vs em.getReference() em.find() → DB를 통해서 실제 엔티티 객체 조회 em.getReference() → DB조회를 미루는 가짜(프록시) 엔티티 객체 조회 프록시란? 실제 클래스를 상속 받아서 만들어짐 실제 클래스와 겉 모양이 같음 개발자 입장에서는 진짜 객체인지 프록시 객체인지 구분X 프록시 객체는 실제 객체의 참조(target)을 보관 프록시 객체를 초기화하면 프록시 객체는 실제 객체의 메소드 호출 프록시 객체는 JPA성능 최적화를 위해 제공하는 기술 → 지연로딩 핵심 원리 📒 프록시 초기화란? 프록시가 실제 엔티티 객체를 불러오는 과정 Member refMember=em.getReference(Member.class,member..

JPA 2023.09.26

JPA_연관 관계 매핑

JPA에서 대부분의 엔티티가 서로 관계를 맺고 있는 걸 확인할 수 있다. 연관관계 매핑이란? 객체의 참조와 테이블의 외래키를 매핑하는 것을 의미 연관관계 매핑 시 고려사항 1. 연관관계의 주인 2. 단방향, 양방향 3. 다중성 우선 그 전에 연관관계 주인에 대해 알아야 양방향관계에 대해서도 알 수 있으니 먼저 설명하겠다. 연관관계의 주인 테이블은 외래키 하나로 두 테이블이 연관관계를 맺음 객체 양방향관계는 A → B, B → A처럼 참조가 2군데 있음, 사실상 단방항관계가 2개 있는거 객체 양방향 관계는 참조가 2군데 있는데, 둘 중 외래키를 관리할 테이블을 지정해야함 연관관계의 주인 → 외래키를 관리하는 참조(주로 Many쪽에 있음) 주인의 반대편 → 외래키에 영향을 주지 않음, 단순 조회만 가능 ma..

JPA 2023.09.23

JPA_영속성 컨텍스트 & 객체와 테이블

영속성 컨텍스트란? 엔티티를 영구 저장하는 환경 애플리케이션과 DB사이에서 객체를 보관하는 논리적 개념 영속성 컨텍스트 장점 1차 캐시 1차캐시는 처음에 persist(user1)로 데이터를 넣으면 DB에 바로 저장되는 것이 아니라 1차 캐시라는 곳에 들어가 있는데 이때 만약 다름 쿼리가 em.find(User.class,user1)인 경우 DB에서 조회를 할 필요없이 1차 캐시에서 발견하였기 때문에 빠르게 반환가능 동일성 보장 두 개의 엔티티가 서로 같은 엔티티인지 DB차원에서 할 필요없이 바로 애플리케이션 차원에서 확인이 가능 트랜잭션을 지원하는 쓰기 지연 만약 em.persist(user1); em.persist(user2); 를 하였을경우 각각 DB에 커밋을 하는 것이 아니라 쓰기 지연 저장소에 ..

JPA 2023.09.19