내배캠 TIL 60일차

오병택·2025년 5월 12일

내배캠

목록 보기
69/73

QueryDSL

fetch() - 리스트 조회
fetchOne() - 단건 조회
fetchFirst() - 첫 번째 결과 조회
fetchResults() - 페이징 정보 포함 조회(결과 + 전체 카운트 조회)
fetchCount() - 카운트만 조회

비교 연산자

.eq() // == (equal)
.ne() // != (not equal)
.gt() // > (greater than)
.goe() // >= (greater or equal)
.lt() // < (less than)
.loe() // <= (less or equal)

문자열 연산

.contains() // LIKE '%value%'
.startsWith() // LIKE 'value%'
.endsWith() // LIKE '%value'
.like("pattern") // 사용자 정의 LIKE

컬렉션 연산

.in() // IN (value1, value2)
.notIn() // NOT IN (value1, value2)
.between() // BETWEEN start AND end

NULL 처리

.isNull()
.isNotNull()

정렬

orderBy()

페이징

offset() & limit()

조인 관련 메서드

.join(조인대상, 별칭)
.leftJoin()
.rightJoin()
.fullJoin()

페치 조인

.fetchJoin()

on() 절

.leftJoin(member.team, team).on(team.name.eq("개발팀"))

그룹화 및 집계

.groupBy()
.count()
.sum()
.avg()
.max()
.min()

서브쿼리

JPAExpressions 사용

.selectFrom(member)
.where(member.age.eq(
JPAExpressions.select(memberSub.age.max())
.from(memberSub)
))

DTO 프로젝션

생성자 기반

.select(Projections.constructor(MemberDto.class,
member.name,
member.age))

@QueryProjection (추천)

.select(new QMemberDto(member.name, member.age))
동적 쿼리

BooleanBuilder
BooleanBuilder builder = new BooleanBuilder();
if (name != null) {
builder.and(member.name.eq(name));
}

Where 다중 조건

.where(nameEq(name), ageEq(age

기타 유용한 메서드

distinct()

.select(member.team.name).distinct()

exists()

.where(JPAExpressions.selectOne()
.from(memberSub)
.where(memberSub.age.gt(30))
.exists())

벌크 연산

update()

queryFactory.update(member)
.set(member.age, member.age.add(1))
.where(member.age.lt(30))
.execute();

delete()

queryFactory.delete(member)
.where(member.age.gt(60))
.execute();

profile
걱정하지 말고 일단 해봐!

0개의 댓글