JPA47 [JPA] 객체지향 쿼리 언어 1 (기본 문법) 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 소개 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● JPQL 소개 가장 단순한 조회 방법은 다음과 같다. EntityManager.find() 또는 객체 그래프 탐색을 하면서 조회할수도 있다. => a.getB().getC() 만약 나이가 18살 이상인 회원을 모두 검색하고 싶다면? 특정 조건을 기준으로 검색을 하고싶다면 어떻게 해야할까? ● JPQL 필요성 JPA를 사용하면 엔티티 객체를 중심으로 개발할수 있다. 문제는 검색 쿼리이다! 애당초 모든 DB데이터를 객체로 변환해서 검색하는 것은 불가능하다. 검색을 할 때도 테이블이 아닌 엔티티 객체.. BackEnd/JPA 2022. 4. 8. [JPA] 값 타입 - 2 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 4. 값 타입의 비교 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 인스턴스가 달라도 그 안에 값이 같으면 같은것으로 봐야한다. // primitive type 비교 int a = 10; int b = 10; System.out.println(a == b); // true // 임베디드 타입 비교 Address a = new Address("서울", "test", 7777); Address b = new Address("서울", "test", 7777); System.out.println(a == b); // false 임베디드 타입을 '==' 연산자로 .. BackEnd/JPA 2022. 4. 7. [JPA] 값 타입 - 1 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 기본값 타입 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 JPA의 데이터 타입은 크게 2가지로 분류 가능하다. (엔티티 타입, 값 타입) 1. 엔티티 타입 - @Entity로 정의하는 객체이다. - 데이터가 변해도 식별자로 지속적인 추적이 가능하다. => 예를 들어 회원 엔티티의 키나 나이값 을 변경해도 식별자로 인식 가능하다. 2. 값 타입 - int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 - 식별자가 없고 값만 있으므로 변경시 추적 불가 => 예를 들어 숫자 100을 200으로 변경하면 완전히 다른 값.. BackEnd/JPA 2022. 4. 7. [JPA] 영속성 전이와 고아 객체 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 영속성 전이 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 특정 엔티티를 영속 상태로 만들 때 연관된 엔티티도 함께 영속상태로 만들고 싶다면? 예를 들어 부모 엔티티를 저장하면 자식 엔티티도 함께 저장되도록 말이다! 우선 영속성 전이가 안되는 기본적인 엔티티의 저장방법부터 알아보자. - parent, child // parent @Entity public class Parent { @Id @GeneratedValue private Long id; private String name; @OneToMany(mappedBy = "parent") priva.. BackEnd/JPA 2022. 4. 6. [JPA] 프록시와 연관관계 관리 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 프록시 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 한가지 의문을 가져보자. Team이라는 필드를 갖고있는 Member를 조회할때 Team도 한번에 함께 조회되어야 할까? 예를 들어 다음과 같은 코드가 있다고 해보자. Member member = entityManager.find(Member.class, 1L); System.out.println("username = " + member.getUsername()); Team team = member.getTeam(); System.out.println("Team = " + team.getName().. BackEnd/JPA 2022. 4. 6. [JPA] 고급 매핑 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 상속관계 매핑 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 관계형 데이터베이스 같은 경우 상속 관계가 없다. 대신 슈퍼타입, 서브타입 관계라는 모델링 기법이 객체 상속과 유사한 방식이다. 상속관계 매핑 : 객체의 상속 구조를 DB에서의 슈퍼타입, 서브타임 관계 매핑으로 해결한다. 위 그림에서 왼쪽과 같은 논리 모델을, 오른쪽과 같은 실제 물리 모델로 구현하는 방법에는 3가지가 있다. 1) 조인 전략 (각각 테이블로 변환) 2) 단일 테이블 전략 (통합 테이블로 변환) 3) 구현 클래스마다 테이블 전략 (서브타입 테이블로 변환) 다음과 같이 @Inh.. BackEnd/JPA 2022. 4. 5. [JPA] 다양한 연관관계 매핑 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 0. 연관관계 매핑시 고려할점 3가지 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● 다중성 다대일: @ManyToOne 일대다: @OneToMany 일대일: @OneToOne 다대다: @ManyToMany => 다대다는 실무에서 사용하면 안된다. ● 단방향, 양방향 - 테이블 외래키 하나로 양쪽 Join 가능하다. 사실상 방향이라는 개념이 없다. - 객체 참조용 필드가 있는 쪽에서 참조 대상으로만 참조가 가능하다. 한 쪽만 참조하면 단방향, 양쪽이 서로 참조하면 양방향 이다. ● 연관관계의 주인 테이블은 외래 키(FK) 하나로 두 테이블의 연관관계를 .. BackEnd/JPA 2022. 4. 4. [JPA] 연관관계 매핑 기초 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 단방향 연관관계 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 우리는 객체와 테이블 연관관계의 차이를 이해해야 합니다. 객체지향의 페러다임과 RDB의 페러다임 간의 간극에서 오는 차이가 있으며 이를 인지하고 공부해야 합니다. 1. 연관관계의 필요성 객체지향 설계의 목표는 자율적인 객체들의 협력 공통체를 만드는 것이다. (조영호) 2. 객체를 테이블에 맞춰 데이터 중심으로 모델링하면, 협력 관계를 만들 수 없다. ● 객체를 테이블에 맞춰 모델링 하기 (연관관계가 없는 객체) 우선 모델링할 다이어 그램을 살펴보자. MEMBER 테이블에서 TEAM의 PK.. BackEnd/JPA 2022. 4. 3. [JPA] 엔티티 매핑 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 객체와 테이블 매핑 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 ● @Entity 1. @Entity가 붙은 클래스를 엔티티 라고 하며, JPA가 관리한다. 2. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수이다. 3. 주의사항 - 기본 생성자 필수(파라미터가 없는 public or protected) - final 클래스, enum, interface inner 클래스 사용 x - 저장할 필드에 final 사용 X 4. 속성 정리 - name 속성 JPA에서 사용할 엔티티의 이름을 지정할수가 있다. 만약 name 속성을 지정하지.. BackEnd/JPA 2022. 4. 2. [JPA] 영속성 관리 - 내부 동작 방식 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 1. 영속성 컨텍스트 1 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 엔티티는 테이블과 매핑되는 하나의 클래스이다. 우선 엔티티 메니저 팩토리를 통해 엔티티 매니저를 생성하는 과정을 살펴봅시다. EntityManagerFactory는 어플리케이션 로딩 시점에 딱 하나만 생성되어야 한다. 이후 사용자의 요청이 들어올때마다 EntityManager를 생성하게 됩니다. 고객의 요청이 들어오면 EntityManager를 생성하고, 요청에 의한 쿼리문이 다 작업이 끝나면 다시 close() 하기를 반복합니다. (EntityManager는 Thread 공유를 하면.. BackEnd/JPA 2022. 4. 2. [Spring] 스프링 DB 접근 기술 내돈내고 내가 공부한것을 올리며, 중요한 단원은 저 자신도 곱씹어 볼겸 상세히 기록하고 얕은부분들은 가겹게 포스팅 하겠습니다. 섹션 6. 스프링 DB 접근 기술 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 1, 2 단원의 JDBC 노가다 방식은 생략하였습니다. 저도 예전에 JDBC 써써 손수 다 해본적 있으니.. 정리는 생략하는걸로.. 1. 스프링 통합 테스트 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번시간에는 전체적인 Spring 코드를 테스트 하는 시간을 갖었다. 우선 코드를 살펴보자. package hello.hellospring.service; import hello.hellospring.domain.Member; imp.. BackEnd/Spring 2022. 1. 14. 이전 1 2 3 4 다음