JVM/JPA

    Querydsl

    ※ 본문은 김영한 선생님의 인프런 '실전! Querydsl' 강의를 듣고 정리한 내용임을 알립니다. ★ Querydsl 설정 관련 - Querydsl 관련 Q파일들은 깃허브에 올리지 않도록 하자. - build.gradle의 Querydsl 설정은 협업이나 여러가지 변동사항이 있을 때 설정이 꼬일 수 있으니 주의하자. ▶ 기본 문법 1. 기본 Q-Type 활용 - Q 클래스 인스턴스를 사용하는 2가지 방법 → 별칭 직접 지정 : QMember qMember = new QMember("m"); → 기본 인스턴스 사용 : QMember qMember = QMember.member; => 같은 테이블을 join하는 경우가 아니라면 기본 인스턴스를 활용하자. 2. 검색 조건 쿼리 where 검색 조건은 .and..

    스프링 데이터 JPA

    ※ 본문은 김영한 선생님의 인프런 '실전! 스프링 데이터 JPA' 강의를 듣고 정리한 내용임을 알립니다. ▶ 스프링 데이터 JPA 공통 인터페이스 JpaRepository 인터페이스 공통 CRUD 제공 제너릭 설정 - 제너릭 타입 T : Entity ID : Entity의 식별자 타입 S : Entity와 그 자식 타입 - 주요 메소드 save(S) : 새로운 Entity는 persist / 이미 있는 Entity는 merge delete(T) : Entity를 하나 삭제함 / 내부에서 em.remove() 호출 findById(ID) : Entity 하나를 조회 / 내부에서 em.find() 호출 getOne(ID) : Entity를 Proxy로 조회 / 내부에서 em.getReference() 호출 ..

    객체지향 쿼리 언어 (JPQL)

    ※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ※ JPA가 지원하는 다양한 쿼리 방법들 JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용 (myBatis, SpringJdbcTemplate) ▶ JPQL (Java Persistence Query Language) : 가장 단순한 조회 방법 1. JPQL이 생긴 이유 JPA를 사용하면 Entity 객체를 중심으로 개발 검색을 할 때도 테이블이 아닌 Entity 객체를 대상으로 검색해야 함 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 애플리케이션이 필요한 데이터만 불러오기 위해서는 결국 검색 조건이 포함된 SQL 필요 2. SQ..

    값 타입

    ※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. - Entity 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 - 값 타입 int, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적 불가 └> 기본값 타입 (자바 기본 타입, Wrapper 클래스(Integer, Long), String) └> 임베디드 타입 (Embedded Type, 복합 값 타입) └> 컬렉션 값 타입 (Collection Value Type) ▶ 기본값 타입 생명주기를 Entity에 의존 값 타입을 공유하면 안됨 (기본값 타입은 항상 값을 복사할 뿐) Wrapper 클..

    Proxy와 연관관계 관리

    ※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ Proxy Q. Member와 Team의 연관관계가 있을 때, Member만 조회하고 싶은데 굳이 Team도 같이 불러와야만 하는가? em.find() : 데이터베이스를 통해 실제 Entity 객체 조회 em.getReference() : 데이터베이스 조회를 미루는 가짜(Proxy) Entity 객체 조회 → Proxy 특징 실제 클래스를 상속받았으므로 실제 클래스와 겉모양이 같음 사용하는 입장에서는 실제 객체와 Proxy 객체를 구분하지 않고 사용해도 됨 Proxy 객체는 실제 객체의 참조(target)를 보관 Proxy 객체를 호출하면 Proxy 객체는 실제 객체의 메소드 호..

    Entity Mapping

    ※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ Entity Mapping의 종류 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn ▶ @Entity @Entity가 붙은 클래스는 JPA가 관리하는 Entity JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 주의사항1. 기본 생성자 필수 (파라미터 없는 public 또는 protected 생성자) 주의사항2. final 클래스, enum, interface, inner 클래스 사용 불가 주의사항3. 저장할 필드에도 final 사용 불가 ※ ..

    영속성 관리

    ※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ★ JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 (Object Relational Mapping) 영속성 컨텍스트 ▶ 영속성 컨텍스트 JPA를 이해하는 데에 있어서 가장 중요한 용어! "Entity를 영구 저장하는 환경" 논리적 개념으로써, 눈에 보이지 않음 EntityManager를 통해서 영속성 컨텍스트에 접근할 수 있음 ★ entityManager.persist(entity); → 사실 entity를 DB에 저장하는 것이 아니라, 영속성 컨텍스트에 저장하는 것! ※ Entity의 생명주기 - 비영속 (new/transient) : 영속성 컨텍스트와 전혀 관..

    JPA란?

    ※ 본문은 김영한 선생님의 인프런 '자바 ORM 표준 JPA 프로그래밍 - 기본편' 강의를 듣고 정리한 내용임을 알립니다. ▶ 기존 SQL 중심적인 개발의 문제점 관계형 데이터베이스를 사용하게 되면 SQL에 의존적인 개발을 피할 수 없다. 객체 지향이 나오게 된 사상과 관계형 데이터베이스가 나오게 된 사상은 다르기에 패러다임의 불일치가 발생한다. 계층형 아키텍쳐를 설계하기가 까다롭고 어렵다. => 1980년대부터 이어져 온 고민 : 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수 없을까? ▶ JPA 개념 : Java Persistence API : 자바 진영의 ORM 기술 표준 ※ ORM Object-Relational Mapping (객체 관계 매핑) 객체는 객체대로, 관계형 DB는 관계형 DB대로 ..