H3-1. 조회건 수 제한 (일반적인 Case)
@Test // Paging
public void testPagingV1(){
List<Slave> slaves = queryFactory
.selectFrom(slave)
.orderBy(slave.slaveName.desc())
.offset(0) // 0부터 시작
.limit(2) // Size 2
.fetch();
assertThat(slaves).hasSize(2);
}
H3-2. 전체 조회 수 필요
@Test // Paging V2
public void testPagingV2() {
QueryResults<Slave> slaves = queryFactory
.selectFrom(slave)
.orderBy(slave.slaveName.desc())
.offset(0) // 0부터 시작
.limit(2) // Size 2
.fetchResults();
// fetchResults()는 전체 개수도 가져온다.
// -> 성능 상의 이슈로 Deprecated 되었다. (대신 fetchCount()를 사용하자)
assertThat(slaves.getResults()).hasSize(2);
assertThat(slaves.getTotal()).isEqualTo(4); // 전체 개수 확인
assertThat(slaves.getOffset()).isEqualTo(0); // offset 확인
assertThat(slaves.getLimit()).isEqualTo(2); // limit 확인
System.out.println("⚠️⚠️⚠️⚠️Slaves: " + slaves.getResults());
}
select s1_0.slave_id,s1_0.age,s1_0.master_id,s1_0.slave_name from slave s1_0 order by s1_0.slave_name desc limit 0,2;
⚠️⚠️⚠️⚠️Slaves: [Slave(id=4, slaveName=slave4, age=40), Slave(id=3, slaveName=slave3, age=30)]
H3-3. 성능 최적화 (권장) 전체 조회수
@Test // Recommended Paging instead of fetchResults()
public void testPagingV3() {
//long total = queryFactory
// .selectFrom(slave)
// .fetchCount(); // 전체 개수만 가져온다. -> Deprecated 되었다.
long total = Optional.ofNullable(
queryFactory.select(slave.count())
.from(slave)
.fetchOne()
).orElse(0L);
List<Slave> slaves = queryFactory
.selectFrom(slave)
.orderBy(slave.slaveName.desc())
.offset(0) // 0부터 시작
.limit(2) // Size 2
.fetch();
assertThat(slaves).hasSize(2);
assertThat(total).isEqualTo(4); // 전체 개수 확인
System.out.println("⚠️⚠️⚠️⚠️Slaves: " + slaves);
}