월별 조회 기능을 추가하려고 하는데 아직 JPA
에 익숙하지 않아서 ..!
기능 구현하면서 알게된 내용들을 정리해보자 🤓💭
SQL
과 비슷한 문법을 가지며, JPQL
은 결국 SQL
로 변환한다.JPA
에서 제공하는 메서드 호출만으로 섬세한 쿼리 작성이 어렵다는 문제에서 JPQL
이 탄생했다.1. 대소문자 구분
SELECT
, FROM
, AS
와 같은 JPQL
키워드는 대소문자를 구분하지 않는다.JPQL
에서 사용한 클래스명은 클래스명이 아닌 엔티티명이다.AS
키워드는 생략 가능하다.@Query("SELECT a FROM AccountLog a WHERE a.member = :#{#request.member} AND FUNCTION('YEAR', a.date) = :#{#request.searchYear.value} AND FUNCTION('MONTH', a.date) = :#{#request.searchMonth.value}")
@Query
: JPQL
을 직접 정의할수있는 어노테이션FUNCTION
: 데이터베이스의 내장 함수를 호출하는 키워드YEAR()
: 날짜에서 연도 부분만 반환한다.MONTH()
: 날짜에서 월 부분만 반환한다.:[parameter]
: 일반 파라미터 쿼리. @Param
사용하지 않는 경우:#{#[dto]}
: 객체 파라미터 쿼리. @Param
을 사용하는 경우..value
: Kotlin
의 Year
와 Month
클래스가 단순 정수(Int)를 바로 제공하지 않고 각각의 클래스가 객체로 감싸진 형태기 때문에, 해당 연도나 월의 숫자 값에 접근하려면 .value
를 호출해야 한다.// `Year`와 `Month`의 구조
val year = Year.of(2024)
println(year) // 2024
println(year.value) // 2024
val month = Month.SEPTEMBER
println(month) // SEPTEMBER
println(month.value) // 9
출처
[JPA] JPQL @Query에 각 DB function() 사용해보기
[Spring] JPQL로 일정 조회하기
[Spring Data JPA] JPQL 사용 방법(@Query & nativeQuery & DTO Mapping & function)
[Java / Spring / JPA] - JPQL이란
[JPA] @Query, 직접 쿼리 작성
MySQL 날짜 함수 YEAR() 설명, 문법, 예시
JPA(JPQL) 의 파라미터로 DTO 받기