아래와 같은 클래스가 있다.
@Entity
@Builder
@Getter
@NoArgsConstructor @AllArgsConstructor
public class PremiumPrice {
@Id
private Long id;
@Column
private BigDecimal usdPrice;
@Column
@CreationTimestamp
private LocalDateTime registDate;
}
만약, 데이터를 찾을 때 registDate 를 기준으로 오늘 이후의 데이터를 찾고 싶으면 어떻게 할까?
여러 가지 방법이 있겠지만 이 글에서는 두 가지 방법을 소개한다.
Expressions.dateTemplate
Expressions.dateTemplate(LocalDateTime.class, "sysdate");
현재 날짜와 시간을 가져오는 것은 DBMS 마다 다른데, SYSDATE 는 Oracle 에서 사용되는 키워드로서 현재 날짜와 시간을 가져온다.
QueryDsl 에서는 Expressions.dateTemplate 로 이러한 키워드를 가져와서 사용할 수 있도록 따로 메서드를 제공해주고 있다.
@Override
public List<Info> getList(Request param) {
JPAQuery<Info> query = queryFactory
.selectFrom(premiumPrice)
.where(premiumPrice.registDate.gt(getSysDate()));
return query.fetch();
}
private DateTemplate<LocalDateTime> getSysDate() {
return Expressions.dateTemplate(LocalDateTime.class, "sysdate");
}
LocalDateTime.now()
어플리케이션단에서 아예 값을 넣어 비교하는 방식이다.
@Override
public List<Info> getList(Request param) {
JPAQuery<Info> query = queryFactory
.selectFrom(premiumPrice)
.where(premiumPrice.registDate.gt(getSysDate()));
return query.fetch();
}
private LocalDateTime getSysDate() {
return LocalDateTime.now();
}
둘의 차이점은 시간을 DBMS 에서 계산한 값을 사용하느냐, 어플리케이션에서 제공한 값을 사용하느냐이므로 상황에 맞게 사용하면 될 것 같다.
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring] ConversionService 활용해보기 (0) | 2022.11.21 |
---|---|
[Spring] AutoConfiguration 직접 만들어서 라이브러리로 만들어보기 (0) | 2022.11.11 |
[JPA] QueryDSL 에서 문자열을 숫자로 뽑아서 변환하기 (0) | 2022.10.24 |
[JPA] Oracle 을 사용해서 Native Query 로 출력 개수까지 다 가져와보기 (0) | 2022.10.17 |
[Spring] 라이브러리 등록 시 라이브러리를 외부에서 소스를 볼 수 있도록 하기 (0) | 2022.10.13 |