querydsl-중급문법

구몽·2023년 12월 29일
0

tuple은 com.querydsl.core 에 포함되는데, 서비스,프리젠테이션 로직에서 사용하는 건 좋은 설계가 아니다. 핵심 비즈니스 로직에서 하부 구현 기술을 사용하는 것은 추후에 변경이 필요할 때 의존성에 의해 불편함이 생김. 그래서...

1. projection

  • Projections.constructor
  • Projections.bean
  • Projections.fields

2. QueryProjection

  • qClass를 생성해서 코드 레벨에서 확인한다.
  • 아쉬운 점은 DTO가 QueryDsl에 의존적으로 변한다. 위의 코멘트와 반대되는 부분

3. 동적쿼리

  • 유용한 유틸리티
 public static BooleanBuilder nullSafeBuilder(Supplier<BooleanExpression> f) {
        try {
            return new BooleanBuilder(f.get());
        } catch (IllegalArgumentException e) {
            return new BooleanBuilder();
        }
    }
    
private BooleanBuilder eqUserName(String userName) {
        return QueryDSLUtil.nullSafeBuilder(
            () -> user.userName.contains(StringUtil.nvl(userName)));
    }

4. bulk 수정/삭제

  • 항상 영속성 컨텐스트가 우선이기 때문에, 업데이트 후 em.flush , clear 해서 처리할 것

0개의 댓글