Spring JPA를 이용하다 보면 복잡한 쿼리들 특히나 복잡한 where clause등을 jpa repository의 CamelCase로 기본 지원되는 것들이 한계가 있었다. 이러한 경우, @query 어노테이션을 활용해 직접 쿼리문을 만들어 사용하였지만, JPA에는 QBE(Query By Example)라는 좋은 기능이 있습니다.
QBE의 핵심은 ExampleMatcher에 있습니다. ExampleMatcher에서 지원하는 여러 메소드를 이용해 검색 대상을 선정할 수 있습니다.
QBE 사용 예시
Example<Person> example = Example.of(new Person("Jon", "Snow"));
repo.findAll(example);
ExampleMatcher matcher = ExampleMatcher.matching().
.withMatcher("firstname", endsWith())
.withMatcher("lastname", startsWith().ignoreCase());
Example<Person> example = Example.of(new Person("Jon", "Snow"), matcher);
repo.count(example);
위 코드에서 첫 번째 예제는 이름과 성이 각각 "Jon"과 "Snow"인 사람들을 찾아내고, 두 번째 예제는 이름이 'n'으로 끝나고 성은 대소문자 구분 없이 'S'로 시작하는 사람들의 수를 찾아냅니다.
참고 링크
- Spring Data Examples - Query by Example on GitHub
- Official Spring Data JPA Documentation - Query by Example
더 자세한 내용은 위 링크에서 확인하실 수 있습니다.
0 개의 댓글:
Post a Comment