
1. SpringData 쿼리
- 정의
- 데이터 접근을 간편하게 만들어주는 프레임워크이며 개발자가 다양한 저장소에 일관된 접근 패턴을 사용하도록 도와준다.
- 기능
- SprintData Common 의 CRUDRepository + PagingAndSortingRepository 이 쿼리기능을 제공
- CRUDRepository : 기본적인 CRUD(Create, Read, Update, Delete) 기능을 제공
- PagingAndSortingRepository : CRUDRepository를 확장한 것이며, 추가적으로 페이지네이션과 정렬 기능을 제공합니다
- 사용방법 (규칙)
List<User> findByNameAndPassword(String name, String password);
List<User> findDistinctUserByNameOrPassword(String name, String password);
List<User> findUserDistinctByNameOrPassword(String name, String password);
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);
Slice<User> findByName(String name, Pageable pageable);
List<User> findByName(String name, Sort sort);
List<User> findByName(String name, Pageable pageable);
Stream<User> readAllByNameNotNull();
QueryDSL
- 정의
- 복잡한 SQL, JPQL 쿼리를 타입 안전(Type-safe)하게 작성할 수 있도록 도와주는 프레임워크
- 기능
- QueryDSL의
**Predicate** 인터페이스로 조건문을 여러개를 구성하여 따로 관리할 수 있다.
findOne(Predicate), findAll(Predicate) 주로 이 2개 메소드가 사용된다.
- 장점
- 타입 안전 쿼리: 문자열 기반 쿼리 대신 Java 코드를 사용하여 쿼리를 작성합니다. 이로 인해 쿼리에 대한 자동완성, 컴파일 타임 체크, 리팩토링의 이점을 얻을 수 있습니다.
- 다양한 데이터 스토어 지원: QueryDSL은 JPA, JDO, SQL, MongoDB, Cassandra 등 다양한 데이터 스토어에 대한 쿼리를 지원합니다.
- 동적 쿼리: 복잡한 조건에 따라 동적으로 쿼리를 구성할 수 있는 기능을 제공합니다. 이를 통해 런타임에 다양한 검색 조건을 처리할 수 있습니다.
- 코드 기반 구성: 쿼리를 자바 코드로 작성하기 때문에, IDE의 코드 완성, 문법 강조, 리팩토링 지원 등의 이점을 누릴 수 있습니다.