@Test
public void basicCase() {
List<String> fetch = queryFactory
.select(member.age
.when(10).then("열살")
.when(20).then("스무살")
.otherwise("기타"))
.from(member)
.fetch();
for (String s : fetch) {
System.out.println("s = " + s);
}
}
- select절에 when(), then(), otherwise()를 통한 간단하게 표현 가능
@Test
public void complexCase() {
List<String> fetch = queryFactory
.select(new CaseBuilder()
.when(member.age.between(0, 20)).then("0~20살")
.when(member.age.between(21, 30)).then("21~30살")
.otherwise("기타")
)
.from(member)
.fetch();
for (String s : fetch) {
System.out.println("s = " + s);
}
}
- between()까지 사용한 표현
@Test
public void constant() {
List<Tuple> fetch = queryFactory
.select(member.username, Expressions.constant("A"))
.from(member)
.fetch();
for (Tuple tuple : fetch) {
System.out.println("tuple = " + tuple);
}
}
- 자바에서 상수는 값이 할당된 후 값을 변경할 수 없는 변수이다.
- 조회결과론 username과 상수 A가 나온다.
@Test
public void concat() {
List<String> fetch = queryFactory
.select(member.username.concat("_").concat(member.age.stringValue()))
.from(member)
.where(member.age.eq(10))
.fetch();
for (String s : fetch) {
System.out.println("s = " + s);
}
}
- concat() 문법은 문자를 합쳐주는 역할을 한다.
- member.age는 int이므로 .StringValue() 를 통해 값을 가져온다.
@Test
public void simpleProjection() {
List<String> fetch = queryFactory
.select(member.username)
.from(member)
.fetch();
for (String s : fetch) {
System.out.println("s = " + s);
}
}
- Projection은 select 대상을 지정하는 것을 의미한다.
- 위의 예시에선 member.username만 지정했다.
@Test
public void tupleProjection() {
List<Tuple> fetch = queryFactory
.select(member.username, member.age)
.from(member)
.fetch();
for (Tuple tuple : fetch) {
String username = tuple.get(member.username);
Integer age = tuple.get(member.age);
System.out.println("username = " + username);
System.out.println("age = " + age);
}
}
- Querydsl에선 select에 대상을 2개 이상 지정하면 반환 타입을 Tuple로 해준다.
- 반환타입이 tuple 객체일때 .get()을 통해 원하는 데이터를 뽑을 수 있다.
Tuple은 Querydsl에서 쿼리 결과를 나타내는 인터페이스 중 하나입니다. Tuple은 일종의 튜플(tuple) 객체로, 여러 필드를 담을 수 있습니다. 예를 들어, SELECT 절에서 여러 개의 컬럼을 선택하면 각 컬럼의 값을 Tuple 객체에 담아서 반환합니다. Tuple은 인덱스(index)를 사용하여 필드에 접근할 수 있으며, 필드의 순서는 쿼리 결과의 컬럼 순서와 일치합니다.
Projection은 Querydsl에서 쿼리 결과를 원하는 형식으로 변환하는 방법 중 하나입니다. Projection은 쿼리 결과를 원하는 필드나 객체에 매핑합니다. 예를 들어, SELECT 절에서 한 개의 컬럼만 선택하더라도 Projection을 사용하여 원하는 객체에 매핑할 수 있습니다. 이렇게 하면 쿼리 결과를 원하는 객체의 필드에 직접 할당할 수 있으므로, 코드의 가독성과 유지 보수성을 높일 수 있습니다. Projection은 여러 형식으로 지원되며, Querydsl에서 제공하는 Projections 클래스를 사용하여 쉽게 작성할 수 있습니다.