[JPA] @Query에 function() 사용 방법

해니·2024년 10월 25일
0

JPA

목록 보기
7/8
post-thumbnail

월별 조회 기능을 추가하려고 하는데 아직 JPA 에 익숙하지 않아서 ..!
기능 구현하면서 알게된 내용들을 정리해보자
🤓💭


JPQL (Java Persistence Query Language)

  • 엔티티 객체를 조회하는 객체지향 쿼리
  • 테이블을 대상으로 쿼리하는 것이 아니라 엔티티 객체를 대상으로 쿼리한다.
  • SQL과 비슷한 문법을 가지며, JPQL은 결국 SQL로 변환한다.
  • JPA에서 제공하는 메서드 호출만으로 섬세한 쿼리 작성이 어렵다는 문제에서 JPQL이 탄생했다.



JPQL 사용시 주의사항

1. 대소문자 구분

  • 엔티티와 속성은 대소문자를 구분한다.
  • SELECT, FROM, AS와 같은 JPQL 키워드는 대소문자를 구분하지 않는다.
    2. 엔티티명
  • JPQL에서 사용한 클래스명은 클래스명이 아닌 엔티티명이다.
  1. 별칭
  • 엔티티 별칭은 필수적으로 명시해야 한다.
  • 별칭을 명시하는 AS 키워드는 생략 가능하다.



JPQL 작성 예시

@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 : KotlinYearMonth 클래스가 단순 정수(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 받기

profile
💻 ⚾️ 🐻

0개의 댓글