Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편
-
10. 객체지향 쿼리 언어2 - 중급 문법Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편 2023. 2. 8. 18:46
1. 경로 표현식 경로 표현식 - .(점)을 찍어 객체 그래프를 탐색하는 것 select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name = '팀A' 경로 표현식 용어 정리 - 상태 필드(state field) : 단순히 값을 저장하기 위한 필드 ㆍ(ex: m.username) - 연관 필드(association field) : 연관관계를 위한 필드 ㆍ단일 값 연관 필드 : @ManyToOne, @OneToOne, 대상이 엔티티 (ex: m.team) ㆍ컬렉션 값 연관 필드 : @OneToMany, @ManyToMany, 대상이 컬렉션 (ex: m.orders) 경..
-
9. 객체지향 쿼리 언어1 - 기본문법Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편 2023. 2. 6. 17:49
1. 소개 JPA는 다양한 쿼리 방법을 지원 - JPQL - JPA Criteria - QueryDSL - 네이티브 SQL - JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 JPQL - 가장 단순한 조회 방법 ㆍEntityManager.find() ㆍ객체 그래프 탐색(a.getB().getC()) - JPA를 사용하면 엔티티 객체를 중심으로 갭라 - 문제는 검색 쿼리 - 검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색 - 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 - 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요 - JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공 - SQL과..
-
8. 값 타입Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편 2023. 2. 6. 16:22
1. 기본값 타입 JPA의 데이터 타입 분류 - 엔티티 타입 ㆍ@Entity로 정의하는 객체 ㆍ데이터가 변해도 식별자로 지속해서 추적 가능 ㆍ예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 - 값 타입 ㆍint, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 ㆍ식별자가 없고 값만 있으므로 변경시 추적 불가 ㆍ예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 - 기본값 타입 ㆍ자바 기본 타입(int, double) ㆍ래퍼 클래스(Integer, Long) ㆍString - 임베디드 타입(embedded type, 복합 값 타입) - 컬렉션 값 타입(collection value type) 기본값 타입 - 예): String n..
-
7. 프록시와 연관관계 관리Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편 2022. 12. 21. 19:00
1. 프록시 - 프록시 기초 ㆍem.find() vs em.getReference() ㆍem.find(): 데이터베이스를 통해서 실제 엔티티 객체 조회 ㆍem.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회 Member2 findMember = em.getReference(Member2.class, member2.getId()); // 사용시점에 DB에 쿼리를 날림 System.out.println("findMember = " + findMember.getClass()); // class hellojpa.Member2$HibernateProxy$HYA9ddRQ : 프록시 클래스 System.out.println("findMember = " + findMember.g..
-
6. 고급 매핑Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편 2022. 12. 21. 15:12
1. 상속관계 매핑 - 관계형 데이터베이스는 상속 관계 X - 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사 - 상속관계 매핑: 객체의 상속과 구조와 DB의 슈퍼타입 서브타입 관계를 매핑 - 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 ㆍ각각 테이블로 변환 → 조인 전략 ㆍ통합 테이블로 변환 → 단일 테이블 전략 ㆍ서브타입 테이블로 변환 → 구현 클래스마다 테이블 전략 - 주요 어노테이션 ㆍ@Inheritance(strategy=InheritanceType.XXX) º JOINED: 조인 전략 º SINGLE_TABLE: 단일 테이블 전략 º TABLE_PER_CLASS: 구현 클래스마다 테이블 전략 ㆍ@DiscriminatorColumn(name="DTYPE") º SIN..
-
5. 다양한 연관관계 매핑Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편 2022. 12. 21. 13:24
- 연관관계 매핑시 고려사항 3가지 ㆍ다중성 ㆍ단방향, 양방향 ㆍ연관관계의 주인 - 다중성 ㆍ다대일: @ManyToOne ㆍ일대다: @OneToMany ㆍ일대일: @OneToOne ㆍ다대다: @ManyToMany → 실무에선 사용하면 안된다! - 단방향, 양방향 ㆍ테이블 º 외래 키 하나로 양쪽 조인 가능 º 사실 방향이라는 개념이 없음 ㆍ객체 º 참조용 필드가 있는 쪽으로만 참조 가능 º 한쪽만 참조하면 단방향 º 양쪽이 서로 참조하면 양방향 - 연관관계의 주인 ㆍ테이블은 외래 키 하나로 두 테이블이 연관관계를 맺음 ㆍ객체 양방향 관계는 A → B, B → A 처럼 참조가 2군데 ㆍ객체 양방향 관계는 참조가 2군데 있음. 둘중 테이블의 외래 키를 관리할 곳을 지정해야함 ㆍ연관관계의 주인: 외래 키를 관..
-
4. 연관관계 매핑 기초Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편 2022. 12. 20. 17:12
- 목표 ㆍ객체와 테이블 연관관계의 차이를 이해 ㆍ객체의 참조와 테이블의 외래 키를 매핑 ㆍ용어 이해 º 방향(Direction) : 단방향, 양방향 º 다중성(Multiplicity) : 다대일(N:1). 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 º 연관관계의 주인(Owner) : 객체 양방향 연관관계는 관리주인이 필요 1. 단방향 연관관계 - 객체를 테이블에 맞추어 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. ㆍ테이블은 외래 키로 조인을 사용해서 연관된 테이블을 찾는다. ㆍ객체는 참조를 사용해서 연관된 객체를 찾는다 ㆍ테이블과 객체 사이에는 이런 큰 간격이 있다. @ManyToOne @JoinColumn(name="TEAM_ID") private Team team; pub..
-
3. 엔티티 매핑Spring-Boot/자바 ORM 표준 JPA 프로그래밍 - 기본편 2022. 11. 16. 18:11
- 엔티티 매핑 소개 ㆍ객체와 테이블 매핑 : @Entity, @Table ㆍ필드와 컬럼 매핑 : @Column ㆍ기본 키 매핑 : @Id ㆍ연관관계 매핑 : @ManyToOne, @JoinColumn 객체와 테이블 매핑 @Entity - @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. - JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 - 주의 ㆍ기본 생성자 필수 (파라미터가 없는 public 또는 protected 생성자) ㆍfinal 클래스, enum, interface, inner 클래스 사용X ㆍ저장할 필드에 final 사용X - 속성 : name ㆍJPA에서 사용할 엔티티 이름을 지정한다 ㆍ기본값 : 클래스 이름을 그대로 사용 (예: Member) ㆍ같은 클래스 이..