본문 바로가기
JPA/Querydsl

Querydsl 10 - SQL function 호출하기

by 킹차니 2022. 1. 20.

SQL function은 JPA와 같이 Dialect에 등록된 내용만 호출할 수 있다.

 

 

replace 함수 사용

@Test
void sqlFunction() {
    List<String> result = queryFactory
            .select(Expressions.stringTemplate(
                    "function('replace', {0}, {1}, {2})",
                    member.username, "member", "M"))
            .from(member)
            .fetch();

    for (String s : result) System.out.println("s = " + s);
}

출력결과:
s = M5
s = M1
s = M2
s = M3
s = M4

원래는 member1, member2, ... 이렇게 저장되었던 회원 이름이 M1, M2로 출력된 것을 알 수 있다. (DB의 데이터를 member1에서 M1로 수정하는 것이 아니다.)

아래와 같은 쿼리가 나간다.

select
      replace(member0_.username,
      ?,
      ?) as col_0_0_ 
  from
      member member0_

 

 

이번에는 멤버들의 username을 소문자로 받도록 해보자.

@Test
void sqlFunctionLower() {
    JPAQuery<String> result = queryFactory
            .select(member.username)
            .from(member)
            .where(member.username.eq(Expressions.stringTemplate("function('lower', {0})",
                    member.username)));
}

lower같은 ansi표준 함수들은 querydsl 상당부분 내장하고 있다. 따라서 다음과 같이 처리해도 위와 같다.

.where(member.username.eq(member.username.lower()))

 

 

 

김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.