실전 Querydsl(김영한) 1
2022.04.16
- 문법
count
column.sum avg max min
join, orderBy, groupBy, having()
eq, in, isNull(), between, goe
fetch, fetchOne, fetchResults
- 조인
join(innerJoin), leftJoin, fetchJoin
연관관계 없는 세타 조인 from(member, team) - on절 사용 가능(leftJoin)
세타조인이 leftJoin으로 진행될 경우 별칭사용 안 함
- 서브쿼리
JPAExpressions - static으로 사용하기
QMember memberSub = QMember("memberSub")로 엔티티 별칭으로 참조
- 기타
assertThat(result).extracting("age").containsExactly(30)
case문 - when().then().otherwise()
- 프로젝션
- Projections.bean(MemberDto.class, member.username, member.age)
setter 필요 - Projections.field()
- Projections.constructor()
DTO 생성자에 @QueryProjection 붙여서 사용
as 또는 ExpressionUtils로 dto 필드명에 맞추기
- Projections.bean(MemberDto.class, member.username, member.age)
- 동적쿼리
BooleanBuilder builder- if(arg != null)
builder.add(member.username.eq(arg))
- if(arg != null)
-
- jpaQueryFactory.selectForm().where(builder)
where 다중 파라미터 -> 쿼리 조립 재활용 가능
- Predicate, BooleanExpressions 사용
- null 주의
- 기타
update().set(member.age, member.age.add(1))
delete().where(member.age.gt(10))
sql function 사용 가능 ex) DATE_FORMAT
- 조회 API 컨트롤러
jpaRepository.search(condition)
MemberSearchCondition dto @QueryProjections
쿼리스트링만으로 쿼리 자동생성 & 검색 기능 사용 가능
- 사용자 정의 리포지토리
CustomRepositoryImpl
interface CustomRepository
extends MemberRepository(== JpaRepository)
- 페이징
offset limit fetchResults => list, count 쿼리 호출 -> deprecated
fetchCount와 fetch로 Page 생성 가능
또는 직접 count 쿼리 + select list 쿼리 조합
다음은 필요할 때만 count 쿼리 실행하는 코드
PageableExecutionUtils.getPage(content, pageable, () -> countQuery.fetchCount())
댓글을 작성해보세요.