CRUDRepository
+ PagingAndSortingRepository
이 쿼리기능을 제공리턴타입
{접두어
}{도입부
}By{프로퍼티 표현식
}(조건식
)(And|Or){프로퍼티 표현식
}(조건식
) (매개변수
...)접두어 | 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, List, Page, Slice, Stream |
매개변수 | Pageable, Sort |
// 기본 -> name과 password로 해당 user 찾아오기
List<User> findByNameAndPassword(String name, String password);
// distinct (중복제거)
// name이나 password로 해당 유저 찾아오기 + 중복 제거
List<User> findDistinctUserByNameOrPassword(String name, String password);
List<User> findUserDistinctByNameOrPassword(String name, String password);
// ignoring case (대소문자 무시)
// name 대소문자 구분하지 말고 user 찾기
List<User> findByNameIgnoreCase(String name);
// name과 password 대소문자 구분하지 말고 user 찾기
List<User> findByNameAndPasswordAllIgnoreCase(String name, String password);
// 정렬
// name으로 찾아오되 name의 오름차순으로 찾아오기
List<Person> findByNameOrderByNameAsc(String name);
// name으로 찾아오되 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();
findOne(Predicate)
, findAll(Predicate)
주로 이 2개 메소드가 사용된다.findOne
= Optional 리턴findAll
= List | Page | Iterable | Slice 리턴Spring 3.X 버전 (이전 버전은 QueryDSL 빌드 Task 를 따로 설정해주어야함)
// application.yml
dependencies {
....
// 9. QueryDSL 적용을 위한 의존성 (SpringBoot3.0 부터는 jakarta 사용해야함)
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
}