inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

querydsl 2개의 파일에서 같은 조건을 사용해야 할 경우

193

토니야

작성한 질문수 6

0

강사님 안녕하세요.

좋은 강의 잘 들었습니다.

querydsl의 정점 중 하나로 where 조건문을 분리하고 재사용한다고 했는데,

예를 들어 UserRepository, StudyRepository라는 2개의 querydsl을 사용하는 repository가 있다 했을 때, 각각의 respository 에서 조회를 할 때 동일한 조건을 사용해야 할 경우가 있습니다.

 

UserRepository.java

public User getUser(Long UserId) {
    return selectForm(user)
    .where(userId);
}

private BooleanExpression eqUser(Long userId) {
    return user.userId.eq(userId);
}

StudyRepository.java

public User getUser(Long UserId) {
    select(study)
    .from(study.user, user)
    .join(study.user)
    .where(user.userId.eq(UserId));
}

private BooleanExpression eqUser(Long userId) {
    return user.userId.eq(userId);
}

 

이렇게 .where(user.userId.eq(1L)) 가 2개의 파일에서 반복되는 경우 각각의 파일에 메소드로 사용하는게 좋을까요? 아니면 다음처럼 공통 유틸 파일을 만들어서 공통으로 사용하는게 좋을까요?

QueryUtils.java

public static BooleanExpression eqUser(Long userId) {
    return user.userId.eq(userId);
}

실무에서는 어떻게 사용 할까요? 이런 경우가 빈번해서 질문 드립니다.

java jpa querydsl

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

토니야님의 질문은 QueryDSL을 사용할 때, 여러 리포지토리 간에 동일한 where 조건을 재사용하는 최선의 방법에 대한 것으로 이해됩니다. 이와 비슷한 상황에 대한 지식공유자의 답변을 찾아볼 수 있었습니다.

강의 “실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화”에서 비슷한 상황에 대한 질문이 있었습니다. 여기서는 QueryDSL의 장점 중 하나로 코드 재사용에 대해 설명하고 있으며, 구체적인 예로 상태(Status) 조건이나 이름(Name)에 대한 like 쿼리 등을 BooleanExpression을 반환하는 메소드로 분리하여 재사용하는 방법에 대해 논의합니다.

이러한 방법은 실무에서도 자주 사용되며, 조건을 별도의 유틸리티 클래스나, 공통 조건을 처리하는 별도의 클래스(예: QueryDSLs 또는 QueryUtils 등)에 정의하여 재사용하는 방식은 효율적인 코드 작성을 돕습니다. 특히, 동일한 조건을 여러 Repository에서 반복해 사용해야 할 경우, 공통 유틸 파일에 메서드를 정의하여 사용하는 것이 중복 코드를 줄이고, 유지보수성을 향상시키는 데 도움이 됩니다.

단순히 링크를 제공하는 것이 아니라, 저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

SpringBoot 4.X에서의 Querydsl 설정

0

95

2

querydsl 오픈소스에 대한 질문

0

75

1

예제에서의 카운트 쿼리에서 join문과 where문은 필요없지 않나요?

0

111

1

Querydsl 6.X버전에 대해서 어떻게 생각하시나요?

0

321

2

여러 테이블 조인하여 통계치를 구하고자 할 때 어떤 방법이 더 효율적일까요

1

71

1

fetchResults()는 더이상 권장되지 않는다는데 맞나요?

0

161

1

querydsl sum() 메서드 없어요.

0

160

2

build 디렉터리 생성

0

140

2

자바 ORM 표준 JPA 프로그래밍 - 기본편 듣고 바로 학습해도 괜찮을까요?

0

114

2

현재 Querydsl에서 from절 서브쿼리를 지원하나요?

0

93

1

오타 제보 드립니다.

0

73

2

벌크 연산과 flush, clear

0

76

1

Run As Intellij 로 변경시 Q타입 import 불가

0

89

1

QHello import하기 문제 발생

0

147

2

등록된 함수 보는법(H2Dialect) 질문

0

69

2

5.0부터 Querydsl은 향후 fetchCount() , fetchResult() 를 지원하지 않기로 결정했다고 하는데 이에 맞는 강의

1

199

2

[환경설정 PDF 부트 3.0이후 설명 질문] build.gradle에 compileQuerydsl을 정의하지 않은 상태에서 Gradle->Tasks->other->compileQuerydsl을 클릭하라고 하는 이유가 무엇인가요??

1

202

1

querydsl 설정 문제

0

222

2

quey dsl 설정부분

0

158

2

count 쿼리 관련 질문입니다!

0

75

1

stringtemplate를 이용하여 where절 검색 방법 질문 드립니다.

0

89

1

답변부탁드리겠습니다.

0

90

2

(OrderSpecifier)관련 내용 어디있을가요

0

66

1

중급문법 벌크연산에서

0

83

2