SQL function 호출하기
SQL function은 JPA와 똑같이 Dialect에 등록된 내용만 호출할 수 있다.
@Test
public void sqlFunction(){
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
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);
}
}
위와 같이 stringtemplate으로 함수를 불러와 사용할 수 있다.
다만 전에 위에 말했던 것처럼 dialect에 등록된 function만 가져올 수 있다.
만일 자신이 만든 function을 등록해서 사용하고 싶으면
해당 데이터베이스의 dialect를 상속받고, ex) h2.dialect
클래스를 구현한 뒤 yml에 등록해서 사용해야 한다.
https://2junbeom.tistory.com/46
자세한 방식은 위 포스트에 정리해 두었다.
이번엔 모든 문자를 소문자로 바꾸는 lower 함수를 써보자
@Test
public void sqlFunction2(){
JPAQueryFactory queryFactory = new JPAQueryFactory(em);
List<String> result = queryFactory.
select(member.username)
.from(member)
.where(member.username.eq(
Expressions.stringTemplate
("function('lower', {0})", member.username)
))
.fetch();
for (String s : result) {
System.out.println("s = " + s);
}
}
예제는 쓰레기기 때문에 예제는 보지말고 그냥 함수 기능만 살펴보자
하지만 저런 기본적인 ANSI 표준에 등록되어 있는 함수들은
Querydsl에 다 함수로 등록이 되어 있어서 잘만 찾아보면 쓸 수 있는 함수가 굉장히 많다.
List<String> result = queryFactory.
select(member.username)
.from(member)
// .where(member.username.eq(
// Expressions.stringTemplate
// ("function('lower', {0})", member.username)
// ))
.where(member.username.eq(member.username.lower()))
.fetch();
lower도 위와 같이 querydsl에 등록된 함수로 간단하게 표현할 수 있다.
'Tools & Libraries > Querydsl' 카테고리의 다른 글
[Querydsl] 순수 JPA와 Querydsl 1. (순수 JPA 리포지토리에서 querydsl 사용해보기) (0) | 2024.10.12 |
---|---|
[Querydsl] Querydsl 중급문법 3 (동적 쿼리 - where절 이용, 벌크 연산) (0) | 2024.09.13 |
[Querydsl] Querydsl 중급문법 2 (@QueryProjection, 동적쿼리 - BooleanBuilder) (0) | 2024.09.11 |
[Querydsl] Querydsl 중급문법 1 (프로젝션과 결과 반환 - Dto) (0) | 2024.09.11 |
[Querydsl] Querydsl 기본문법 5 (Case 문, 상수 문자 더하기) (0) | 2024.09.06 |