월별 조회 기능을 추가하려고 하는데 아직 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 받기