SEB_BE 51일차 - JPA기반 데이터 액세스 계층3

subimm_·2022년 11월 3일
0

코드스테이츠

목록 보기
51/83

💡 오늘의 학습목표

  • Spring Data JPA 를 통한 데이터 액세스 계층 구현

📔 Spring Data JPA

  • Spring Data 패밀리 기술 중 하나
    • JPA / Hibernate ORM / Spring Data JPA
      • JPA는 엔터프라이즈 Java 애플리케이션에서 관계형 데이터베이스를 사용하기 위해 정해 놓은 표준 스펙 (기술 명세)
      • Hibernate ORM 은 JPA라는 표준 스펙을 구현한 구편체, 실제 사용할 수 있는 API
      • Spring Data JPA는 JPA 스텍을 구현한 구현체의 API를 조금 더 쉽게 사용할 수 있도록 해주는 모듈

📖 엔티티 클래스 정의

  • Member 엔티티 클래스
  • (1) 회원의 상태를 저정하기 위해 추가된 enum 필드 처음 등록 기본 값은 MEMBER_ACTIVE
  • (2)는 (1)에서 정의된 memberStatus 에서 사용하는 enum

  • Coffee 엔티티 클래스


  • Order 엔티티 클래스

📖 리포지토리 인터페이스 구현

  • MemberRepository
  • (1)과 같이 CrudRepository 대신 JpaRepository 를 상속

  • CoffeeRepository
  • (2) JPA에서는 복잡한 검색 조건을 지정하기 위한 몇 가지 방법 제공
  • JPQL을 통한 객체 지향 쿼리 사용
    • JPA에서는 JPQL이라는 객체 지향 쿼리를 통해 데이터베이스 내의 테이블 조회 가능
    • JPQL은 데이터베이스의 테이블을 대상으로 조회하는 것이 아니라 엔티티 클래스의 객체를 대상으로 객체를 조회하는 방법
    • JPQL을 사용해서 객체를 조회하면 JPA가 내부적으로 분석해서 SQL을 만들어 데이터베이스를 조회하고, 그 결과를 엔티티 객체로 매핑한 뒤에 반환
    • (2-3)은 JPQL을 사용해서 coffeeId에 해당하는 커피 정보 조회
      • 객체를 대상으로 한 조회이기 때문에 COFFEE 테이블이 아니라 Coffee 클래스 라는 객체 지정, coffee_id 컬럼이 아닌 coffeeId 필드를 지정해야 한다.
      • c는 Coffee 클래스의 별칭이기 때문에 "SELECT c FROM ~" 과 같이 SQL에서 사용하는 * 이 아니라 c로 모든 필드를 조회하는 것.
      • (2-1) 과 같이 SELECT c 를 생략한 형태로 사용 가능
    • 네이티브 SQL을 통한 조회
      • SQL쿼리로도 작성 가능 (2-2) 의 nativeQuery 애트리뷰트의 값을 true로 설정하면 쿼리 적용
  • @Query 패키지 경로 주의

  • OrderRepository

📖 서비스 클래스 구현

  • MemberService



  • CoffeeService



  • OrderService

📖 그 외 변경된 클래스

  • OrderController
  • OrderPatchDto 추가
  • MemberPatchDto
  • MemberResponseDto
  • CoffeePatchDto
profile
코린이의 공부 일지

0개의 댓글