BooleanBuilder 사용
// 동일 함수 내에서 구현
BooleanBuilder booleanBuilder = new BooleanBuilder();
if(id != null && id != 0L){
booleanBuilder.and(user.id.eq(id));
}
if(name != null && !"".equals(name)){
booleanBuilder.and(user.name.eq(name));
}
return jpaQueryFactory
.select(Projections.fields(
com.test.react.Model.User.class,
user.id.as("userId"),
user.name.as("name"),
userDetail.id.as("userDetailId"),
userDetail.age.as("age"),
userDetail.address.as("address")
)).from(user)
.leftJoin(userDetail)
.on(userDetail.userId.eq(user.id))
.where(booleanBuilder) // 동적 쿼리
.offset((page <= 0) ? 0 : (page -1))
.limit(blockCnt)
.fetch();
BooleanExpression 사용
재사용 가능
주로 사용하게 된다
// 동적 쿼리를 외부에 구현
private BooleanExpression usernameEq(String name){
return (name != null && !"".equals(name)) ? user.name.eq(name) : null;
}
private BooleanExpression userIdEq(Long id){
return (id != null && id != 0L) ? user.id.eq(id) : null;
}
private function(){
return jpaQueryFactory
.select(Projections.fields(
com.test.react.Model.User.class,
user.id.as("userId"),
user.name.as("name"),
userDetail.id.as("userDetailId"),
userDetail.age.as("age"),
userDetail.address.as("address")
)).from(user)
.leftJoin(userDetail)
.on(userDetail.userId.eq(user.id))
.where(usernameEq(name), userIdEq(id)) // 동적 쿼리
.offset((page <= 0) ? 0 : (page -1))
.limit(blockCnt)
.fetch();
}
'JPA > queryDsl' 카테고리의 다른 글
DB 함수 호출 (0) | 2021.03.22 |
---|---|
queryDsl 모듈별 빌드 (0) | 2021.03.09 |
Filter 이름별 조건 설정 방법 (0) | 2021.03.09 |
UPDATE, DELETE 문 (0) | 2020.06.09 |
Select 문 (0) | 2020.06.09 |