내일배움캠프 Spring 52일차(금) TIL - SpringData쿼리 & QueryDSL

Skadi·2024년 3월 11일
0

1. SpringData 쿼리

  • 정의
    • 데이터 접근을 간편하게 만들어주는 프레임워크이며 개발자가 다양한 저장소에 일관된 접근 패턴을 사용하도록 도와준다.
  • 기능
    • SprintData Common 의 CRUDRepository + PagingAndSortingRepository 이 쿼리기능을 제공
      • CRUDRepository : 기본적인 CRUD(Create, Read, Update, Delete) 기능을 제공
      • PagingAndSortingRepository : CRUDRepository를 확장한 것이며, 추가적으로 페이지네이션과 정렬 기능을 제공합니다
  • 사용방법 (규칙)
// 기본
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

  • 정의
    • 복잡한 SQL, JPQL 쿼리를 타입 안전(Type-safe)하게 작성할 수 있도록 도와주는 프레임워크
  • 기능
    • QueryDSL의 **Predicate** 인터페이스로 조건문을 여러개를 구성하여 따로 관리할 수 있다.
    • findOne(Predicate), findAll(Predicate) 주로 이 2개 메소드가 사용된다.
  • 장점
    • 타입 안전 쿼리: 문자열 기반 쿼리 대신 Java 코드를 사용하여 쿼리를 작성합니다. 이로 인해 쿼리에 대한 자동완성, 컴파일 타임 체크, 리팩토링의 이점을 얻을 수 있습니다.
    • 다양한 데이터 스토어 지원: QueryDSL은 JPA, JDO, SQL, MongoDB, Cassandra 등 다양한 데이터 스토어에 대한 쿼리를 지원합니다.
    • 동적 쿼리: 복잡한 조건에 따라 동적으로 쿼리를 구성할 수 있는 기능을 제공합니다. 이를 통해 런타임에 다양한 검색 조건을 처리할 수 있습니다.
    • 코드 기반 구성: 쿼리를 자바 코드로 작성하기 때문에, IDE의 코드 완성, 문법 강조, 리팩토링 지원 등의 이점을 누릴 수 있습니다.

0개의 댓글