13. 스프링 데이터 JPA

스프링 데이터 JPA?

  • 스프링 프레임워크에서 JPA를 편하게 사용할 수 있도록 지원하는 프로젝트
  • 데이터 접근 계층(repository)를 인터페이스만 작성해도 런타임 시에 스프링 데이터 JPA가 구현 객체를 주입해줌
  • 즉, 구현 클래스를 직접 작성하지 않고 인터페이스만 작성해도 CRUD를 할 수 있음

Continue reading

12. 객체지향 쿼리 언어(3) - JPQL 조인

JPQL 조인

  • 내부 조인 (INNERT JOIN)
    •   String teamName = "teamA";
        String query = "SELECT m FROM Member m INNER JOIN m.team t "
                      + "WHERE t.name = :teamName";
        List<Member> members = em.createQuery(query, Member.class)
                              .setParameter("teamName", teamName)
                              .getResultList();
      
    • JPQL은 조인을 할때도 연관관계 필드를 사용함
      • m.team t
    •   String SQL = "SELECT M.ID, M.AGE ... FROM MEMBER M 
                      INNER JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID
                      WHERE T.NAME = ?
                      "
        String JPQL = "select m FROM Member m INNER JOIN m.team t
                      WHERE t.name = ?"
      

Continue reading

10. 객체지향 쿼리 언어(1) - JPA에서 지원하는 엔티티 조회 방법

1. 객체지향 쿼리

  • JPA에서 엔티티를 조회하는 방법?
    • EntityManager.find() 메소드
    • 조건부 탐색을 하고싶을 땐? (e.g. 나이가 18세 이상인 회원을 조회)
      • 모든 엔티티를 조회 후에 조건을 적용해야 함
      • 데이터베이스 조회 시 필요한 내용을 최대한 거를 필요가 있음
  • JPQL(Java Persistence Query Language)
    • 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리
    • SQL을 추상화 해서 특정 데이터베이스 SQL에 의존하지 않음

Continue reading

9. 값 타입

JPA의 데이터 타입

  • 엔티티 타입
    • @Entity로 정의하는 객체
  • 값 타입
    • 기본값 타입(basic value type)
      • 자바 기본 타입(e.g. int, double)

      • 래퍼 클래스 (e.g. Integer)
      • String
    • 임베디드 타입(embedded type, 복합 값 타입)
      • JPA에서 정의해서 사용
    • 컬렉션 값 타입(collection value type)
      • JPA에서 정의해서 사용

Continue reading

8. 프록시와 연관관계 관리

프록시란?

  • JPA의 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데, 이것을 프록시 객체라고 함
  • JPA의 지연 로딩 : 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연시키는 방법(실제 데이터를 사용할 때 조회)
  • JPA의 표준 명세는 지연 로딩의 구현 방법을 JPA 구현체에 위임함
    • 하이버네이트 기준으로 아래 내용 작성
    • 하이버네이트가 지연 로딩을 지원하는 방법
      • 프록시
      • 바이트코드 수정 : 복잡해서 다루지 않음

Continue reading

7. 고급 매핑

고급 매핑

  • 상속 관계 매핑
    • 객체의 상속 관계를 데이터베이스에 어떻게 매핑하는지
  • @MappedSuperclass
    • 등록일, 수정일 같이 여러 엔티티에서 공통으로 사용하는 매핑 정보만 상속받고 싶을 때 사용
  • 복합 키와 식별 관계 매핑
    • 데이터베이스의 식별자가 하나 이상일 때 매핑하는 방법
    • 데이터베이스 설계에서 이야기하는 식별, 비식별 관계에 대해서
  • 조인 테이블
    • 테이블을 외래키 하나로 연관관계 맺는 것이 아닌 연결 테이블을 이용해서 매핑하는 방법
  • 엔티티 하나에 여러 테이블 매핑하기
    • 엔티티 하나에 여러 테이블을 매핑하는 방법

Continue reading

Pagination


© 2020.02. by blupine