SpringData 쿼리
기능
- SprintData Common 의
CRUDRepository
+ PagingAndSortingRepository
이 쿼리기능을 제공
사용 방법
접두어 |
Find, Get, Query, Count, ... |
도입부 |
Distinct, First(N), Top(N) |
프로퍼티 표현식 |
Person.Address.ZipCode => find(Person)ByAddress_ZipCode(...) |
조건식 |
IgnoreCase, Between, LessThan, GreaterThan, Like, Contains, ... |
정렬 조건 |
OrderBy{프로퍼티}Asc |
리턴 타입 |
E, Optional<E>, List<E>, Page<E>, Slice<E>, Stream<E> |
매개변수 |
Pageable, Sort |
// 기본
List<User> findByNameAndPassword(String name, String password);
// distinct (중복제거)
List<User> findDistinctUserByNameOrPassword(String name, String password);
List<User> findUserDistinctByNameOrPassword(String name, String password);
// ignoring case (대소문자 무시)
List<User> findByNameIgnoreCase(String name);
List<User> findByNameAndPasswordAllIgnoreCase(String name, String password);
// 정렬
List<Person> findByNameOrderByNameAsc(String name);
List<Person> findByNameOrderByNameDesc(String name);
// 페이징
Page<User> findByName(String name, Pageable pageable); // Page 는 카운트쿼리 수행됨
Slice<User> findByName(String name, Pageable pageable); // Slice 는 카운트쿼리 수행안됨
List<User> findByName(String name, Sort sort);
List<User> findByName(String name, Pageable pageable);
// 스트림 (stream 다쓴후 자원 해제 해줘야하므로 try with resource 사용추천)
Stream<User> readAllByNameNotNull();
QueryDSL
기능
- QueryDSL의
Predicate
인터페이스로 조건문을 여러개를 구성하여 따로 관리할 수 있다.
findOne(Predicate)
, findAll(Predicate)
주로 이 2개 메소드가 사용된다.
findOne
= Optional<T> 리턴
findAll
= List<T> | Page<T> | Iterable<T> | Slice<T> 리턴
- Type Safe 기능
- 조건문 구성시에 사용되는 객체, 필드 조건이 실제 타입과 일치한지 체크해준다.
장점