보통 일반적인 내장 function들은 기본제공된다.
각 DB에 맞춘 Dialect에 선언된 Function들은 기본 제공되지만, 자기가 DB에 만든 Function은
기본 Dialect를 상속받아 만든 파일을 등록하고, yml같은 파일에 선언해줘야한다.
H2Dialect에 선언된 기본 기능들
rtrim, space 등등 다양한 기능들을 제공한다.
기본 사용 기능중 replace 예제
@Test
public void sqlFunction() throws Exception {
//username의 memeber를 다 m으로 치환하는 Function
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);
}
/* select function('replace', member1.username, 'member'1, 'm'2)
from Member member1 */
/*
select replace(member0_.username, NULL, ?) as col_0_0_ from member member0_;
*/
}
기본적으로 Expressions를 사용하지만, 너무 내장 기본 기능은 이미 구현되어있으므로, 그냥 QObject의 lower()같이 사용할 수 있다.
@Test
public void sqlFunction2() throws Exception {
//username의 memeber를 다 소문자로 변환시키는 Function
List<Member> result = queryFactory
.select(member
).from(member)
//.where(member.username.eq(Expressions.stringTemplate("function('lower', {0})", member.username)))
.where(member.username.eq(member.username.lower()))
.fetch();
for (Member s : result) {
System.out.println(s);
}
/* select function('lower', member1.username)
from Member member1 */
/*
select lower(member0_.username) as col_0_0_ from member member0_;
*/
}
'스프링 > QueryDsl' 카테고리의 다른 글
[QueryDsl] SpringDataJPA가 제공하는 QuerydslPredicateExecutor 인터페이스 사용해서 간단 Table Repository 기능 구현하기 (Predicate 직접삽입) (0) | 2022.03.22 |
---|---|
[QueryDsl] `JPA Repository + QueryDsl`로 동적 쿼리 & API 개발 구축 (Builder or 다중 Where 메서드) (0) | 2022.03.21 |
[QueryDsl] 벌크 update,delete (0) | 2022.03.13 |
[QueryDsl] 동적쿼리짜기 (0) | 2022.03.11 |
[QueryDsl] Projection(select에서 뭘 가져올까?)종류에 따른 결과 반환 (Tuple, Dto로 반환)하는 법 (0) | 2022.03.11 |