GW LABS

스프링 부트 핵심 가이드 (6) - Spring Data JPA 활용 본문

Book-Review/Programing

스프링 부트 핵심 가이드 (6) - Spring Data JPA 활용

GeonWoo Kim 2022. 8. 16. 21:40

8.2 JPQL

  • 엔티티 객체를 대상으로 수행하는 쿼리 언어
    • ex) SELECT p FROM Product p WHERE p.number = ?1;

 

8.3 쿼리 메서드 살펴보기

  • 쿼리 메서드의 생성
    • 주제(Subject)와 서술어(Predicate)로 쿼리를 생성
    • ‘By’를 통해 서술어의 시작을 나타낸다.
      • ex) List<Person> findByLastnameAndEmail(String lastName, String email);
  • 쿼리 메서드의 주제 키워드
    • find..By
    • read..By
    • get..By
    • query..By
    • search..By
    • stream..By
    • exists..By: 특정 데이터의 존재여부
    • count..By: 쿼리 결과로 나온 레코드의 개수
    • delete..By, remove..By: 삭제 쿼리를 수행
    • First<number>, Top<number>: 조회된 결과값의 개수를 제한
      • ex) findFirst5ByName, findTop10ByName
  • 쿼리 메서드의 조건자 키워드
    • Not: 값의 불일치 조건
    • Null, NotNull: 값이 null인지 검사
    • True, False: boolean 타입으로 지정된 컬럼값 확인
    • And, Or: 여러 조건을 묶을 때 사용
    • GreaterThan, LessThan, Between: 비교 연산
    • StartingWith, EndingWith, Containing, Like: 쿼리의 Like 검색

 

8.4 정렬과 페이징 처리

  • 정렬 처리하기
    • OrderBy 사용으로 정렬을 수행할 수 있음
      • ex) findByNameOrderByAsc
    • 매개변수를 활용하여 정렬할 수도 있음
      • ex) findByName(”test”, Sort.by(Order.asc(”price”)))
  • 페이징 처리
    • 페이징 처리를 위해 Page와 Pageable을 사용
      • ex) findByName(”test”, PageRequest.of(0, 2))

 

8.5 Query 어노테이션 사용하기

  • 매퍼에서와 같이 쿼리를 직접 사용할 수도 있다.

 

8.6 QueryDSL 적용하기

  • 위의 Query 어노테이션의 한계는 컴파일 시점에 SQL 구문오류를 잡을 수 없다는 점이다.
  • QueryDSL은 정적 타입을 이용하여 SQL과 같은 쿼리를 생성할 수 있도록 지원하는 프레임워크이다.
  • 장점
    • IDE 코드 자동 완성 기능 사용가능
    • 문법적으로 잘못된 쿼리를 허용하지 않음
    • 고정된 SQL 쿼리를 작성하지 않아 동적으로 쿼리 생성 가능
    • 가독성 및 생산성
    • 도메인 타입과 프로퍼티를 안전하게 참조할 수 있음
  • 사용법
    • 의존성 추가
    • APT 플러그인 추가
    • compile 단계 수행
    • Q도메인 쿼리 타입 클래스를 참조하여 QueryDSL 작성
  • QuerydslPredicateExecutor, QuerydslRepositorySupport
    • Repository에서 QueryDSL을 사용하기 쉽게 만들어주는 인터페이스 및 추상클래스

 

8.7 JPA Auditing 적용

  • 엔티티 클래스에 공통적으로 들어가는 생성 일자, 변경 일자와 같은 필드들을 자동으로 생성
  • EnableJpaAuditing 추가하여 활용할 수 있음
  • BaseEntity 만들기
    • BaseEntity는 엔티티에 공통으로 들어가게 되는 필드를 하나의 클래스로 관리하는 기법
    • MappedSuperclass: JPA의 엔티티 클래스가 상속받을 경우 자식 클래스에게 매핑 정보를 전달하는 어노테이션
    • EntityListeners: 엔티티를 데이터베이스에 적용하기 전후로 콜백을 요청할 수 있게하는 어노테이션
    • AuditingEntityListner: 엔티티의 Auditing 정보를 주입하는 JPA 엔티티 리스너 클래스
    • CreatedDate: 데이터 생성 날짜를 자동으로 주입하는 어노테이션
    • LastModifiedDate: 데이터 수정 날짜를 자동으로 주입하는 어노테이션
Comments