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
.isNull()
.isNotNull()
orderBy()
offset() & limit()
.join(조인대상, 별칭)
.leftJoin()
.rightJoin()
.fullJoin()
.fetchJoin()
.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)
))
생성자 기반
.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(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();