JPAQueryFactory를 사용하여 쿼리를 생성합니다.
QUser qUser = QUser.user;
JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
List<User> users = queryFactory.selectFrom(qUser)
.where(qUser.age.gt(18))
.fetch();
QueryDSL은 조건을 조합하거나 분리하여 동적으로 사용할 수 있습니다.
BooleanExpression ageOver18 = qUser.age.gt(18);
BooleanExpression nameIsJohn = qUser.name.eq("John");
List<User> users = queryFactory.selectFrom(qUser)
.where(ageOver18.and(nameIsJohn))
.fetch();
BooleanBuilder를 사용하여 동적으로 조건을 추가합니다.
BooleanBuilder builder = new BooleanBuilder();
if (age != null) {
builder.and(qUser.age.gt(age));
}
if (name != null) {
builder.and(qUser.name.contains(name));
}
List<User> users = queryFactory.selectFrom(qUser)
.where(builder)
.fetch();
List<User> users = queryFactory.selectFrom(qUser)
.where(qUser.age.gt(18))
.orderBy(qUser.name.asc())
.offset(0)
.limit(10)
.fetch();
Tuple result = queryFactory.select(qUser.age.avg(), qUser.age.max())
.from(qUser)
.fetchOne();
Double avgAge = result.get(qUser.age.avg());
Integer maxAge = result.get(qUser.age.max());