조건에 따라 쿼리문을 다르게 작성하고 싶을 때 쓰는 방법
- BooleanBuilder
fun findDynamicQuery(name: String?, age: String?, phoneNumber: String?):List<Member>{
val builder = BooleanBuilder()
if (!StringUtils.isNullOrEmpty(name)) builder.and(member.name.eq(name))
if (!StringUtils.isNullOrEmpty(age)) builder.and(member.age.eq(age))
if (!StringUtils.isNullOrEmpty(phoneNumber)) builder.and(member.phoneNumber.eq(phoneNumber))
return queryFactory.selectFrom(member)
.where(builder)
.fetch()
}
여러개의 if로 구성되어 있어 where문 통째로 어떤 쿼리인지 보기 어렵고
조건이 더 많아진다면 결과를 더 추측하기 힘들 것
- BooleanExpression
fun findDynamicQuery(name: String?, age: String?, phoneNumber: String?): List<Member> {
return queryFactory
.selectFrom(member)
.where(
eqName(name),
eqAge(age),
eqPhoneNumber(phoneNumber)
)
.fetch()
}
fun eqName(name: String?): BooleanExpression? {
return if (StringUtils.isNullOrEmpty(name)) null else member.name.eq(name)
}
fun eqAge(age: String?): BooleanExpression? {
return if (StringUtils.isNullOrEmpty(age)) null else member.age.eq(age)
}
fun eqPhoneNumber(phoneNumber: String?): BooleanExpression? {
return if (StringUtils.isNullOrEmpty(phoneNumber)) null else member.age.eq(age)
}
BooleanExpression을 이용하여 명시적으로 알 수 있는 코드를 작성할 수 있게 된다
where에 and or , 로 조건을 추가할 수 있어 한눈에 보기 편하다
null이 반환시 자동으로 조건절에서 제외되지만
모든 조건문이 null인 경우를 대비하여 and연산자보다는 , 를 사용하여 null Exception을 방지한다
반응형
'Kotlin' 카테고리의 다른 글
ModelAndView에서 Thymeleaf 사용하기 (0) | 2022.12.14 |
---|---|
QueryDSL select절에 subQuery 조회 (0) | 2022.12.13 |
Spring Boot REST API Key 만들어서 적용하기 (0) | 2022.11.15 |
[Spring Boot] Interceptor로 토큰 검증 적용 (0) | 2022.11.10 |
[Spring Boot] AOP 적용하기 (0) | 2022.11.01 |
댓글