728x90

jpa 23

[JPA] 스프링 데이터 - 스프링 데이터 JPA 분석

김영한님의 실전! 스프링 데이터 JPA 정리 1. 스프링 데이터 JPA 구현체 분석 - 스프링 데이터 JPA가 제공하는 공통 인터페이스의 구현체 - org.springframework.data.jpa.repository.support.SimpleJpaRepository - @Repository 적용: JPA 예외를 스프링이 추상화한 예외로 변환 - @Transactional 트랜잭션 적용 (1) JPA의 모든 변경은 트랜잭션 안에서 동작 (2) 스프링 데이터 JPA는 변경(등록, 수정, 삭제) 메소드를 트랜잭션 처리 (3) 서비스 계층에서 트랜잭션을 시작하지 않으면 Repository에서 트랜잭션 시작 (4) 서비스 계층에서 트랜잭션을 시작하면 Repository는 해당 트랜잭션을 전파 받아서 사용 (5..

[JPA] 스프링 데이터 - 확장 기능

김영한님의 실전! 스프링 데이터 JPA 정리 1. 사용자 정의 리포지토리 구현 - 스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동 생성 - 스프링 데이터 JPA가 제공하는 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많음 - 다양한 이유로 인터페이스의 메소드를 직접 구현하고 싶다면? (1) JPA 직접 사용(EntityManager) (2) 스프링 JDBC Template 사용 (3) MyBatis 사용 (4) 데이터베이스 커넥션 직접 사용 등등.. (5) Querydsl 사용 - 사용자 정의 인터페이스 public interface MemberRepositoryCustom { List findMemberCustom(); } - 사용자 정의 인터페이스 구현 클래스 ..

[JPA] 스프링 데이터 - 쿼리 메소드 기능

김영한님의 실전! 스프링 데이터 JPA 정리 1. 메소드 이름으로 쿼리 생성 - 메소드 이름을 분석해서 JPQL 쿼리 생성 - 이름과 나이를 기준으로 회원을 조회하려면? // 순수 JPA public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age > :age") .setParameter("username", username) .setParameter("age", age) .getResultList(); } // 스프링 데이터 JPA public interface MemberReposit..

[JPA] 스프링 데이터 - 공통 인터페이스 기능

김영한님의 실전! 스프링 데이터 JPA 정리 1. 공통 인터페이스 설정 - JavaConfig 설정 - 스프링 부트 사용 시 생략 가능 @Configuration @EnableJpaRepositories(basePackages = "jpabook.jpashop.repository") public class AppConfig {} - 스프링 부트 사용 시 @SpringBootApplication 위치를 지정(해당 패키지와 하위 패키지 인식) - 만약 위치가 달라지면 @EnableJpaRepositories 필요 - 스프링 데이터 JPA가 구현 클래스 대신 생성 - org.springframework.data.repository.Repository를 구현한 클래스는 스캔 대상 -> memberReposito..

[JPA] 객체지향 쿼리 언어 - 중급 문법

1. 경로 표현식 - .(점)을 찍어 객체 그래프를 탐색하는 것 - 경로 표현식 특징 (1) 상태 필드(state field) 경로 탐색의 끝, 탐색 X (2) 단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색 O (3) 컬렉션 값 연관 연관 경로: 묵시적 내부 조인 발생, 탐색 X (4) FROM 절에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해 탐색 가능 - 명시적 조인, 묵시적 조인 (1) 명시적 조인: join 키워드 직접 사용 select m from Member m join m.team t (2)묵시적 조인: 경로 표현식에 의해 묵시적으로 SQL 조인 발생(내부 조인만 가능) select m.team from Member m - 실무 조언 (1) 가급적 묵시적 조인 ..

[JPA] 객체지향 쿼리 언어 - 기본 문법

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. JPQL - JPQL은 객체지향 쿼리 언어다. 따라서 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다. - JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다. - JPQL은 결국 SQL로 변환된다. 2. 문법 - select m from Member as m where m.age > 18 - 엔티티와 속성은 대소문자 구문 O(Member, age) - JPQL 키워드는대소문자 구분 X(SELECT, FROM, where) - 엔티티 이름 사용, 테이블 이름이 아님(Member) - 별칭은 필수(m) (as는 생략 가능) TypeQUery, Query - TypeQuery: 반환 타입이 명확할..

[JPA] 값 타입

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. JPA의 데이터 타입 분류 - 엔티티 타입 (1) @Entity로 정의하는 객체 (2) 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 나이 값을 변경해도 키는 식별자로 인식 - 값 타입 (1) int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 (2) 식별자가 없고 값만 있으므로 변경 시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 2. 값 타입 분류 - 기본값 타입 (1) 자바 기본 타입(int, double) (2) 래퍼 클래스(Integer, Long) (3) String - 임베디드 타입(embedded type, 복합 값 타입) - 컬렉션 값 ..

[JPA] 프록시와 연관관계 관리

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 프록시 - Member에 프로퍼티로 Team을 가지고 있을 때 em.find로 member을 조회하면 쿼리로 member와 team을 같이 조회한다. - team은 사용하지 않을 것이고 member의 username만 사용한다면 굳이 team을 조회할 필요가 없다. - 필요할 때 조회하기 위해 프록시를 사용한다. 2. 프록시 기초 - em.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 - em.getReference(): 데이터 조회를 미루는 가짜(프록시) 엔티티 객체 조회(DB로 쿼리를 날리지 않고 파라미터로 넣어준 클래스를 상속받은 가짜(프록시) 엔티티를 만들어서 프록시 객체가 영속성 컨텍스트에 들어간다.) 3. 프록시 ..

[JPA] 고급 매핑

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 상속관계 매핑 - 관계형 데이터베이스는 상속 관계 X - 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 - 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 - 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 (1) 각각 테이블로 변환 -> 조인 전략 (2) 통합 테이블로 변환 -> 단일 테이블 전략 (3) 서브타입 테이블로 변환 -> 구현 클래스마다 테이블 전략 2. 조인 전략 - 장점 (1) 테이블 정규화 (2) 외래 키 참조 무결성 제약조건 활용가능 (3) 저장공간 효율화 - 단점 (1) 조회 시 조인을 많이 사용, 성능 저하 (2) 조회 쿼리가 복잡함 (3) 데이터 저장 시 IN..

[JPA] 다양한 연관관계 매핑

김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 정리 1. 연관관계 매핑시 고려사항 3가지 - 다중성 - 단방향, 양방향 - 연관관계의 주인 2. 다중성 - 다대일: @ManyToOne - 일대다: @OneToMany - 일대일: @OneToOne - 다대다: @ManyToMany -> 실무에서 사용 X 3. 단방향, 양방향 - 테이블 (1) 외래키 하나로 양쪽 조인 가능 (2) 사실 방향이라는 개념이 없음 - 객체 (1) 참조용 필드가 있는 쪽으로만 참조 가능 (2) 한쪽만 참조하면 단방향 (3) 양쪽이 서로 참조하면 양방향 - 연관관계의 주인 (1) 테이블은 외래키 하나로 두 테이블이 연관관계를 맺음 (2) 객체 양방향 관계는 A->B, B->A 처럼 참조가 2군데 (3) 객체 양방향 관계는..

728x90