Querydsl 동적쿼리 사용예시

가람·2022년 7월 12일
1

Querydsl 을 사용하면 상황에 따라 쿼리를 여러개 작성하는대신 조건문을 이용하여 동적쿼리를 작성할 수 있다.
간단한 예시는 아래와 같다. ( kotlin, spring boot )

SELECT 절

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 절에 들어갈 조건을 동적으로 작성할 수 있다.

UPDATE 절

@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 개수이다.

profile
hello world :)

0개의 댓글