Spring Framework 39

Chapter 10. 객체지향 쿼리 언어1 - 기본 문법

10.0 intro JPA가 지원하는 다양한 쿼리 방법 JPQL(Java Persistence Query Language) JPA Criteria(객체 지향 쿼리 빌더): Java 코드를 짜서 JPQL을 빌드해주는 모음 (JPQL의 작성을 도와주는 빌더 클래스이다.) 기본으로 JPQL을 쓰고 안 되는 경우에 네이티브 SQL 사용 QueryDSL 네이티브 SQL 쿼리를 Java 코드로 작성할 수 있도록 도와주는 기술이다. JDBC API 직접 사용, MyBatis, SpringJdbcTemplate을 함께 쓴다. JPQL - 객체 지향 SQL 가장 단순한 조회 방법 EntityManager.find() 객체 그래프 탐색(a.getB().getC()) JPA를 사용하면 엔티티 중심으로 개발한다. 문제는 검색..

Chapter 09. 값 타입

9.1 기본값 타입 JPA의 데이터 타입 분류 엔티티 타입(entity type) 엔티티 타입이란 @Entity로 정의하는 클래스 객체를 말한다. 데이터가 변해도 식별자로 지속해서 추적 가능하다 ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능하다. 값 타입 int, Integer, String 처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경 시 추적이 불가능하다 ex) 숫자 100 => 200 바꾸면 완전히 다른 값으로 대체 기본값 타입: 자바 기본 타입(int, double) / 래퍼 클래스 / String 생명 주기를 엔티티에 의존한다. ex) 회원 삭제하면 이름, 나이도 함께 삭제 값 타입은 공유하면 안 된다. ex) 회원 이름 변경 시 다른..

Chapter 08. 프록시와 연관 관계 관리

8.1 프록시(proxy) 프록시(proxy) em.find(): 데이터베이스를 통해 실제 엔티티 객체를 조회한다. em.getReference(): 데이터베이스 조회를 미루는 가짜(프록시) 엔티티 객체 조회한다. 하이버네이트가 라이브러리를 사용해서 가짜 엔티티를 준다. DB에 쿼리가 안 날아가는데 객체가 조회되는 것이다. ex) Member를 조회할 때 Team도 조회해야할까? 상황마다 다르다 어떤 프로젝트의 경우, 멤버만 필요 어떤 프로젝트의 경우는 멤버와 팀 둘다 필요할 수 있다. 이를 "프록시"로 해결 가능하다. 프록시의 특징 실제 클래스를 상속 받았기 때문에 실제 Entity와 겉 모양이 같다. 사용하는 입장에서는 진짜인지 프록시 객체인지 구분하지 않고 사용하도록 한다. 프록시 객체는 실제 객체..

Chapter 07. 고급 매핑

7.1 상속 관계 매핑 상속 관계 매핑 - @Inheritance(strategy=infheritanceType.XXX) 관계형 데이터베이스는 상속 관계 매핑이 없다. 그마나 "슈퍼타입 서브타입 관계"라는 모델링 기법이 객체 상속과 가장 유사한다. 상속 관계 매핑: 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다. 슈퍼 타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법 조인 전략(JOINED): 각각 테이블로 변환 ITEM 이라는 테이블을 만들고 데이터를 같이 가져올 때 조인으로 구성한다. (조인 전략은 비즈니스적으로 중요하고 복잡할 때 쓰면 좋다.) ex) 앨범 데이터를 추가하면 앨범의 이름, 가격은 ITEM에 들어간다. 아티스트 정보는 앨범 테이블에 들어간다. INSERT..

Chapter 06. 다양한 연관관계 매핑

6.1 다대일 (n : 1) 다대일 단방향 다대일 단방향은 가장 많이 사용하는 연관관계이다. 다대일의 반대는 일대다 Ex) 다대일 단방향 Member("다", 주인 쪽)에만 아래와 같이 표시된다. Team("일") 쪽에는 아무 표시없다. @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; // 연관 관계의 주인 다대일 양방향 반대 쪽에도 추가한다. 양 쪽을 서로 참조하도록 개발한다. 외래 키가 있는 쪽(MEMBER)이 연관 관계의 주인이다. 테이블에 전혀 영향을 주지 않는다. (주인이 아니라서) Ex) 다대일 양방향 Team 클래스에도 @OneToMany를 추가한다. "mappedBy"가 있으면 가짜 주인 클래스 => (mappedBy ="team"..

Chapter 05. 연관 관계 매핑 기초

5.1 단방향 연관 관계 연관 관계가 필요한 이유 연관 관계가 없으면 계속해서 객체를 끄집어내서 조회해야한다. => 객체 지향의 성격과 동떨어진다. Ex) jpa-basic 프로젝트의 멤버 클래스 package hellojpa; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name= "USERNAME") // DB에 넣고 싶은 값 private String userName; /..

Chapter 04. 엔티티 매핑 (entity mapping)

4.1 객체와 테이블 매핑 @Entity @Entity가 붙은 클래스는JPA가 관리한다. "엔티티" JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수! 주의 사항 파라미터 없는 기본 생성자가 필요하다. (public or protected) fianl, enum, interface, inner 클래스에는 @Entity를 사용할 수 없다. DB에 저장할 필드에는 final을 사용하지 않는다. 클래스 이름을 그대로 테이블로 사용한다. (기본값) 4.2 데이터베이스 스키마 자동 생성 데이터베이스 스키마 자동 생성 DDL을 애플리케이션 실행 시점에 자동으로 생성한다. CREATE 테이블 중심 => 객체 중심 데이터베이스 dialect를 활용해서 데이터베이스에 맞는 적절한 DDL을 생성한다. ex)..

Chapter 03. 영속성 관리 - 내부 동작 방식

3.1 영속성 컨텍스트 (1) JPA에서 가장 중요한 것은? (1) 객체와 관계형 데이터베이스 매핑하기(ORM) (2) 영속성 컨텍스트(Persistence Context): entity를 영구 저장하는 환경이라는 뜻이다. 논리적인 개념이며 눈에 보이지 않는다. EntityManager를 통해 영속성 컨텍스트에 접근한다. ex) Entity.Manager.persist(entity) - persist 메서드는 데이터베이스가 아니라 엔티티를 사실 Persist Context에 저장하는 것이다. 아래 그림: 고객이 요청할 때마다 Entity manager를 생성한다. manager는 내부적으로 데이터베이스 커넥션을 사용해서 DB를 사용한다. 엔티티의 생명 주기 비영속(new / transient): 영속성 ..

Chapter 02. JPA 시작하기

2.1 프로젝트 생성 H2 데이터베이스 설치와 실행 H2는 웹 용 Query tool을 제공하는 가벼운 실습용 데이터 베이스이다. 시퀀스, auto increment 기능 지원 데이터베이스 시뮬레이션 기능이 있다. H2 데이터베이스를 설치한다. https://www.h2database.com/html/main.html maven 프로젝트 생성 maven - 라이브러리 자동 다운로드 및 의존성 관리 아까 사이트에서 다운받은 2.1.214 버전과 같은 드라이버를 사용해야한다. 4.0.0 jpa-basic ex1-hello-jpa 1.0.0 org.hibernate hibernate-entitymanager 5.3.10.Final com.h2database h2 2.1.214 JPA 설정 - persisten..

Chapter 01. JPA 소개

1.1 SQL 중심적인 개발의 문제점 문제점 관계형 데이터베이스를 쓰면서 SQL에 의존적인 개발을 피하기 어렵다. 패러다임의 불일치 객체(속성과 기능을 캡슐화해서 쓰는 게 목표) vs 관계형 데이터베이스(데이터 정교화 및 보관) 객체를 영구 보관하는 다양한 저장소 RDB - 관계형 데이터베이스 NoSQL - 비관계형 데이터베이스 File ODB 객체와 관계형 데이터베이스의 차이 객체 - RDB 상속 - Table 슈퍼타입 서브타입 관계 연관 관계: 객체는 참조 사용(ex. get) - 테이블은 외래 키 사용 (pk - fk 조인) 객체는 단방향, 테이블은 양방향 조회 가능하다. 데이터 타입 데이터 식별 방법 1.2 JPA (Java Persistence API)소개 JPA(Java Persiatence ..