자바 프로그래밍 9주차 학습일지

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
복사
대문자 주의