Querydsl 을 사용하면 상황에 따라 쿼리를 여러개 작성하는대신 조건문을 이용하여 동적쿼리를 작성할 수 있다.
간단한 예시는 아래와 같다. ( kotlin, spring boot )
fun find(params: DataParams): List<DataEntity> {
val Data = QDataEntity.dataEntity
val builder = BooleanBuilder()
if (A != null) builder.and(Data.property1.eq(A))
if (B != null) builder.and(Data.property2.eq(B))
return jpaQueryFactory
.select( Data )
.from( Data )
.where( builder )
.fetch()
}
BooleanBuilder 를 이용해서 where 절에 들어갈 조건을 동적으로 작성할 수 있다.
@Transactional
fun update(params: DataParams): Long {
val Data = QDataEntity.dataEntity
val builder = JPAUpdateClause(entityManager, Data)
if (params.A != null) builder.set(Data.A, params.A)
if (params.B != null) builder.set(Data.B, params.B)
return builder
.where(
metaData.appId.eq(params.appId)
.and(metaData.company.eq(params.company))
.and(metaData.wayToUse.eq(params.wayToUse))
)
.execute()
}
JPAUpdateClause 를 이용해서 update 할 내용을 동적으로 작성할 수 있다.
참고로 여기서 return 값은 update에 성공한 record 개수이다.