개발강의정리/Spring

[스프링 데이터 JPA] 4-10. 스프링 데이터 JPA: Query by Example

nineDeveloper 2019. 12. 14.
728x90

스프링 데이터 JPA

4. 스프링 데이터 JPA 활용

포스팅 참조 정보

GitHub

공부한 내용은 GitHub에 공부용 Organizations에 정리 하고 있습니다

해당 포스팅에 대한 내용의 GitHub 주소

실습 내용이나 자세한 소스코드는 GitHub에 있습니다
포스팅 내용은 간략하게 추린 핵심 내용만 포스팅되어 있습니다

https://github.com/freespringlecture/spring-data-jpa-study/tree/chap04-10-jpa-query_by_example

해당 포스팅 참고 인프런 강의

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EB%8D%B0%EC%9D%B4%ED%84%B0-jpa/dashboard

실습 환경

  • Java Version: Java 11
  • SpringBoot Version: 2.1.2.RELEASE

10. 스프링 데이터 JPA: Query by Example

  • QBE는 필드 이름을 작성할 필요 없이(뻥)
  • 단순한 인터페이스를 통해 동적으로 쿼리를 만드는 기능을 제공하는 사용자 친화적인 쿼리 기술입니다
  • 어떠한 예제 객체를 가지고 쿼리를 만드는 개념
  • 잘 사용하지 않게 될 것 같은 기능
     

Example = Probe + ExampleMatcher

  • Probe는 필드에 어떤 값들을 가지고 있는 도메인 객체
  • ExampleMatcherProve에 들어있는 그 필드의 값들을 어떻게 쿼리할 데이터와 비교할지 정의한 것
  • Example은 그 둘을 하나로 합친 것 이걸로 쿼리를 함
     

장점

  • 별다른 코드 생성기나 애노테이션 처리기 필요 없음.
  • 도메인 객체 리팩토링 해도 기존 쿼리가 깨질 걱정하지 않아도 됨.(뻥)
  • 데이터 기술에 독립적인 API

단점

  • nested 또는 프로퍼티 그룹 제약 조건을 못 만든다.
  • 조건이 제한적이다 
  • 문자열은 starts/contains/ends/regex 가 가능하고 그밖에 propery는 값이 정확히 일치해야 한다
     

QueryByExampleExecutor

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-by-example

실습

Repository 에 QueryByExampleExecutor 추가

public interface CommentRepository extends JpaRepository<Comment, Long>, QueryByExampleExecutor<Comment> {
}

테스트 작성

다른조건은 무시하고 besttrue인 예제를 만들고 쿼리를 수행

@Test
public void qbe() {
    Comment prove = new Comment();
    prove.setBest(true);

    ExampleMatcher exampleMatcher = ExampleMatcher.matchingAny().withIgnorePaths("up","down");
    Example<Comment> example = Example.of(prove, exampleMatcher);
    comments.findAll(example);
}


728x90

댓글

💲 추천 글