[스프링] 스프링 데이터 - 스프링 데이터 JPA와 QueryDSL

애그리거트(Aggregate)와 명세(Specification)

  • 도메인 주도 설계에서의 애그리거트와 명세
    • 애그리거트
    • 명세
  • 불리언 로직을 사용하여 비즈니스 규칙들을 체이닝 형태로 결합할 수 있게 만드는 것을 명세 패턴(specification pattern)이라고 함Wiki
  • 스프링은 Specification 클래스에 해당 개념을 정의
  • Specification 객체는 and(), not(), or(), where() 메서드를 통해 서로 조합 가능함
  • Specification 객체 조합 후 toPredicate() 메서드를 호출하여 조합한 Specification 객체를 Predicate 객체로 변환

스프링 데이터 JPA에서 JPA Criteria API 기반 명세 사용 방법

  1. Specification 인터페이스 구현 객체 정의
  2. javax.persistence.criteria.Predicate 객체(명세, 검색 조건)를 반환하는 Specification의 toPredicate() 메서드 구현
    • toPredicate() 메서드에 명세(검색 조건)을 정의
  3. JpaRepository 인터페이스를 상속하는 레포지토리 인터페이스에서 JpaSpecificationExecutor 인터페이스 상속
  4. JpaSpecificationExecutor의 메소드 호출 시 인자로 Specification 객체 전달하여 검색 조건으로 사용

스프링 데이터 JPA에서 QueryDSL 기반 명세 사용 방법

  1. Specification 인터페이스 구현 객체 정의
  2. com.querydsl.core.types.Predicate 객체(명세, 검색 조건)를 반환하는 Specification의 toPredicate() 메서드 구현
    • toPredicate() 메서드에 명세(검색 조건)을 정의
  3. JpaRepository 인터페이스를 상속하는 레포지토리 인터페이스에서 QuerydslPredicateExecutor 인터페이스 상속
  4. QuerydslPredicateExecutor 메소드 호출 시 인자로 Specification 객체 전달하여 검색 조건으로 사용

스프링 데이터 JPA에서 QueryDSL 사용 방법

  1. QuerydslPredicateExecutorDoc
  2. QueryDslRepositorySupport

QueryFactory

QueryDSL의 BooleanBuilder, BooleanExpression

참고

Comments