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를 바탕으로 정리하였습니다.
'JPA > Querydsl' 카테고리의 다른 글
Querydsl 12 - 동적쿼리와 성능 최적화 조회(where 절 파라미터) (0) | 2022.01.22 |
---|---|
Querydsl 11 - 순수 JPA 리포지토리와 Querydsl, 동적쿼리 Builder (0) | 2022.01.21 |
Querydsl 09 - 수정, 삭제 배치 쿼리 (0) | 2022.01.20 |
Querydsl 08 - 동적 쿼리 (0) | 2022.01.20 |
Querydsl 07 - 프로젝션과 결과반환 (0) | 2022.01.19 |