1. 학습한 내용 정리
•
Spring Data JPA에서 제공하는 Query Method 개념을 학습
•
메서드 이름만으로 자동으로 쿼리가 생성되는 원리 이해
•
단순 조회 및 조건 검색 시 Query Method 유용
•
복잡한 쿼리 실행을 위해 @Query 애너테이션을 사용하여 JPQL 작성
•
JPQL은 엔티티와 필드 중심 언어이며, SQL과 유사하지만 테이블 기반 아님
•
@Query로 네이티브 쿼리도 사용 가능
•
H2 메모리 데이터베이스를 활용하여 쿼리 결과 검증 테스트 코드 작성
초과 | > | GreaterThan | findByAgeGreaterThan(int age) |
이상 | >= | GreaterThanEqual | findByAgeGreaterThanEqual(int age) |
미만 | < | LessThan | findByAgeLessThan(int age) |
이하 | <= | LessThanEqual | findByAgeLessThanEqual(int age) |
같음 | = | Equal (생략 가능) | findByName(String name) or findByNameEqual(String name) |
같지 않음 | != | NotEqual | findByStatusNotEqual(String status) |
Between | BETWEEN | Between | findByAgeBetween(int min, int max) |
2. 작성한 핵심 코드 설명
•
findByName(String name)
특정 강의명을 기준으로 단일 엔티티 조회.
Optional 타입 반환으로 null 처리 안전성 확보
•
findAllByCategory(String category)
강의 카테고리 기준으로 전체 목록 조회.
Category 컬럼 기준 조건 검색 동작 확인
•
findAllByCategoryOrderByName(String category)
Category 조건 만족 데이터 강의명 오름차순 정렬
메서드 이름만으로 정렬 조건 포함 가능
•
countByCategory(String category)
Category 기준 데이터 개수 계산
Count 쿼리 사용법 학습
•
findByNameOrCategory(String name, String category)
이름 또는 카테고리 조건 데이터 조회
OR 조건 쿼리 메서드 명으로 생성 확인
•
findByCategoryAndRatingLessThan(String category, int rating)
카테고리 AND 평점 기준 조건 검색
비교 연산 키워드(LessThan) 활용 가능
•
@Query("SELECT c.category, AVG(c.rating) FROM Course c group by c.category")
JPQL을 사용하여 카테고리별 평균 평점 조회
그룹 함수와 Group By 기능 적용 가능
3. 오류 해결 과정 및 주의사항
•
Query Method 작성 시 필드명과 엔티티명 대소문자 정확히 일치 필요
•
JPQL 작성 시 엔티티명 사용 (테이블명 아님)
•
네이티브 쿼리 사용 시 nativeQuery = true 옵션 필수
•
잘못된 메서드 네이밍 구조 (find, findByStartingWith, find(String)) → IDE/실행 오류 발생 가능
4. 연습문제 풀이
1.
특정 강의명(name)이 존재하는지 확인하는 쿼리 메서드
boolean existsByName(String name)
Java
복사
•
주의: exists에 s 포함, 대문자 주의
1.
강의명(name)이 특정 문자열로 시작(StartingWith) 하는 모든 강의 목록 조회
List<Course> findAllByNameStartingWith(String name)
Java
복사
•
대문자 주의