Java

QueryDSL StringTemplate 사용

zamezzz 2022. 2. 23. 17:56

* QueryDSL StringTemplate 사용

 

QueryDSL에서도 SQL Function 사용을 통해 쿼리를 간단하게 작성해야 할 경우가 있습니다.

 

이 경우 Expressions.stringTemplate() 혹은 Expressions.numberTemplate() 등을 통해 SQL Function을 사용할 수 있습니다.

이를 통해 Date cast, lower case 작성 등을 QueryDSL에서 쉽게 사용 가능합니다.

 

Postgres에서 사용하는 간단한 예시 쿼리문을 몇개 살펴보겠습니다.

예시1) Date 추출 

JPAQuery<String> query = this.queryFactory.selectfrom(myTable)
   .groupby(Expressions.stringTemplate(
    "DATE_FORMAT({0},'{1s}')", myTable.createDate, ConstantImpl.create("%Y-%m-%d"));

또는

StringTemplate formattedDateExpression = Expressions.stringTemplate(
    "DATE_FORMAT({0},'{1s}')", qOrderItem.orderDate, ConstantImpl.create("%Y-%m-%d"));
    
JPAQuery<String> query = this.queryFactory.selectfrom(myTable)
   .groupby(formattedDateExpression);


예시2) Loweer Case

JPAQuery<String> query = this.queryFactory.selectfrom(myTable)
   .where(Expressions.stringTemplate("lower({0})", myTable.name).in(nameList))

또는   

StringTemplate nameInExpression = Expressions.stringTemplate("lower({0})", myTable.name).in(nameList);
    
JPAQuery<String> query = this.queryFactory.selectfrom(myTable)
   .where(nameInExpression)

 

기타 지원하는 함수는 queryDSL 코드를 보면 알 수 있습니다.

해당 깃헙 주소는 아래와 같으니, 참고해주시면 됩니다.

https://github.com/querydsl/querydsl/blob/master/querydsl-core/src/main/java/com/querydsl/core/types/dsl/Expressions.java#L2000

반응형