[Querydsl] Querydsl 중급문법 4 (SQL function 호출하는 방법)
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
[JPA] 객체 지향 쿼리 언어 JPQL 4(기본 문법 - 조인, 서브쿼리, 조건식 , 기본 함수)
조인내부 조인:select m from Member m [inner] join m.team t외부 조인:select m from Member m left [outer] join m.team t세타 조인:select count(m) from Member m, Team t where m.username = t.name[]는 생략이 가능하다. 조인 - ON 절조인
2junbeom.tistory.com
자세한 방식은 위 포스트에 정리해 두었다.
이번엔 모든 문자를 소문자로 바꾸는 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에 등록된 함수로 간단하게 표현할 수 있다.