querydsl : search, resultFetch, sort, paging, aggregation, group
This commit is contained in:
@@ -11,6 +11,7 @@ spring:
|
||||
properties:
|
||||
hibernate:
|
||||
format_sql: true
|
||||
use_sql_comments: true
|
||||
|
||||
logging.level:
|
||||
org.hibernate.SQL: debug
|
||||
|
||||
@@ -2,7 +2,10 @@ package com.example.querydsl;
|
||||
|
||||
import com.example.querydsl.entity.Member;
|
||||
import com.example.querydsl.entity.QMember;
|
||||
import com.example.querydsl.entity.QTeam;
|
||||
import com.example.querydsl.entity.Team;
|
||||
import com.querydsl.core.QueryResults;
|
||||
import com.querydsl.core.Tuple;
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
@@ -13,6 +16,10 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.example.querydsl.entity.QMember.*;
|
||||
import static com.example.querydsl.entity.QTeam.*;
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
|
||||
@SpringBootTest
|
||||
@@ -56,14 +63,144 @@ public class QuerydslBasicTest {
|
||||
|
||||
@Test
|
||||
void startQuerydsl() {
|
||||
QMember m = new QMember("m");
|
||||
|
||||
Member findMember = queryFactory
|
||||
.select(m)
|
||||
.from(m)
|
||||
.where(m.username.eq("member1")) // 파라미터 바인딩 처리
|
||||
.select(member)
|
||||
.from(member)
|
||||
.where(member.username.eq("member1")) // 파라미터 바인딩 처리
|
||||
.fetchOne();
|
||||
|
||||
assertThat(findMember.getUsername()).isEqualTo("member1");
|
||||
}
|
||||
|
||||
@Test
|
||||
void search() {
|
||||
Member findMember = queryFactory
|
||||
.selectFrom(member)
|
||||
.where(member.username.eq("member1")
|
||||
.and(member.age.eq(10)))
|
||||
.fetchOne();
|
||||
|
||||
assertThat(findMember.getUsername()).isEqualTo("member1");
|
||||
}
|
||||
|
||||
@Test
|
||||
void searchAndParam() {
|
||||
Member findMember = queryFactory
|
||||
.selectFrom(member)
|
||||
.where(
|
||||
member.username.eq("member1"),
|
||||
member.age.eq(10)
|
||||
)
|
||||
.fetchOne();
|
||||
|
||||
assertThat(findMember.getUsername()).isEqualTo("member1");
|
||||
}
|
||||
|
||||
@Test
|
||||
void resultFetch() {
|
||||
List<Member> fetch = queryFactory
|
||||
.selectFrom(member)
|
||||
.fetch();
|
||||
Member fetchOne = queryFactory
|
||||
.selectFrom(member)
|
||||
.where(member.username.eq("member1"))
|
||||
.fetchOne();
|
||||
Member fetchFirst = queryFactory
|
||||
.selectFrom(member)
|
||||
.fetchFirst();
|
||||
QueryResults<Member> fetchResults = queryFactory
|
||||
.selectFrom(member)
|
||||
.fetchResults();
|
||||
long total = fetchResults.getTotal();
|
||||
List<Member> content = fetchResults.getResults();
|
||||
|
||||
long fetchCount = queryFactory
|
||||
.selectFrom(member)
|
||||
.fetchCount();
|
||||
}
|
||||
|
||||
/**
|
||||
* 회원 정렬 순서
|
||||
* 1. 회원 나이 내림차순
|
||||
* 2. 회원 이름 올림차순
|
||||
* 단 2에서 회원 이름이 없으면 마지막에 출력(nulls last)
|
||||
*/
|
||||
@Test
|
||||
void sort() {
|
||||
em.persist(new Member(null, 100));
|
||||
em.persist(new Member("member5", 100));
|
||||
em.persist(new Member("member6", 100));
|
||||
|
||||
List<Member> result = queryFactory
|
||||
.selectFrom(member)
|
||||
.where(member.age.eq(100))
|
||||
.orderBy(member.age.desc(), member.username.asc().nullsLast())
|
||||
.fetch();
|
||||
|
||||
Member member5 = result.get(0);
|
||||
Member member6 = result.get(1);
|
||||
Member memberNull = result.get(2);
|
||||
assertThat(member5.getUsername()).isEqualTo("member5");
|
||||
assertThat(member6.getUsername()).isEqualTo("member6");
|
||||
assertThat(memberNull.getUsername()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void paging1() {
|
||||
QueryResults<Member> result = queryFactory
|
||||
.selectFrom(member)
|
||||
.orderBy(member.username.desc())
|
||||
.offset(1)
|
||||
.limit(2)
|
||||
.fetchResults();
|
||||
|
||||
assertThat(result.getTotal()).isEqualTo(4);
|
||||
assertThat(result.getLimit()).isEqualTo(2);
|
||||
assertThat(result.getOffset()).isEqualTo(1);
|
||||
assertThat(result.getResults().size()).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
void aggregation() {
|
||||
List<Tuple> result = queryFactory
|
||||
.select(
|
||||
member.count(),
|
||||
member.age.sum(),
|
||||
member.age.avg(),
|
||||
member.age.max(),
|
||||
member.age.min()
|
||||
)
|
||||
.from(member)
|
||||
.fetch();
|
||||
|
||||
Tuple tuple = result.get(0);
|
||||
|
||||
assertThat(tuple.get(member.count())).isEqualTo(4);
|
||||
assertThat(tuple.get(member.age.sum())).isEqualTo(100);
|
||||
assertThat(tuple.get(member.age.avg())).isEqualTo(25);
|
||||
assertThat(tuple.get(member.age.max())).isEqualTo(40);
|
||||
assertThat(tuple.get(member.age.min())).isEqualTo(10);
|
||||
}
|
||||
|
||||
/**
|
||||
* 팀의 이름과 각 팀의 평균 연령 구하기
|
||||
*/
|
||||
@Test
|
||||
void group() throws Exception {
|
||||
List<Tuple> result = queryFactory
|
||||
.select(team.name, member.age.avg())
|
||||
.from(member)
|
||||
.join(member.team, team)
|
||||
.groupBy(team.name)
|
||||
.fetch();
|
||||
|
||||
Tuple teamA = result.get(0);
|
||||
Tuple teamB = result.get(1);
|
||||
|
||||
assertThat(teamA.get(team.name)).isEqualTo("teamA");
|
||||
assertThat(teamA.get( member.age.avg())).isEqualTo(15);
|
||||
|
||||
assertThat(teamB.get(team.name)).isEqualTo("teamB");
|
||||
assertThat(teamB.get( member.age.avg())).isEqualTo(35);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user