inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

동적 쿼리와 성능 최적화 조회 - Where절 파라미터 사용

allEq() 만들기

해결된 질문

398

궁금이

작성한 질문수 49

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
allEq를 만들기 위해서,

    private BooleanExpression allEq(MemberSearchCondition condition){
        return usernameEq(condition.getUsername())
                .and(teamNameEq(condition.getTeamName()))
                .and(ageGoe(condition.getAgeGoe()))
                .and(ageLoe(condition.getAgeLoe()));
    }

이런 식의 코드를 만들기 위해서는 null 대신 빈 표현식을 반환해야 하는데, new BooleanExpression()은 안되는 모양이예요.

그래서 찾아봤더니,
null 대신 Expressions.TRUE를 중립조건으로 반환하게 하는거예요.

근데 이러면 나가는 쿼리가,

    /* select
        member1.id,
        member1.username,
        member1.age,
        team.id,
        team.name 
    from
        Member member1   
    left join
        member1.team as team 
    where
        true 
        and team.name = ?1 
        and true 
        and true */ select
            m1_0.member_id,
            m1_0.username,
            m1_0.age,
            m1_0.team_id,
            t1_0.name 
        from
            member m1_0 
        left join
            team t1_0 
                on t1_0.team_id=m1_0.team_id 
        where
            true 
            and t1_0.name=? 
            and true 
            and true

이렇게 true로 섞여서 나가지만, 저런 것들은 DB내에서 최적화 해줘서 문제가 없다고 해요.

 

근데 아무래도 익숙하지 않은 상황에서는 다른 분이 보았을 때 저게 뭐지? 왜 저 쿼리가 나가지? 라는 생각을 할 것 같아요.

그런데, 저 and true를 보고 아, 동적 쿼리를 사용했나? 라고 생각할 수 있는 사람끼리 본다면 굉장히 괜찮은 방법 같아요.

 

근데 여튼간에 보여지는 것 자체에는 의미없는 쿼리가 나가는 거라서, 유지보수 면에서 좀 그럴 것 같다는 생각이 들어서요.

실무에서는 어떤가요?

java jpa

답변 1

1

김영한

안녕하세요. 궁금이님

이렇게 하는 것은 좋은 방향이 아니라 생각합니다.

다음을 참고해주세요.

https://www.inflearn.com/questions/94056

감사합니다.

0

궁금이

감사합니다!

SpringBoot 4.X에서의 Querydsl 설정

0

88

2

querydsl 오픈소스에 대한 질문

0

72

1

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

0

109

1

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

0

317

2

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

1

70

1

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

0

160

1

querydsl sum() 메서드 없어요.

0

159

2

build 디렉터리 생성

0

136

2

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

0

114

2

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

0

91

1

오타 제보 드립니다.

0

72

2

벌크 연산과 flush, clear

0

76

1

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

0

88

1

QHello import하기 문제 발생

0

147

2

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

0

68

2

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

1

196

2

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

1

200

1

querydsl 설정 문제

0

222

2

quey dsl 설정부분

0

158

2

count 쿼리 관련 질문입니다!

0

75

1

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

0

89

1

답변부탁드리겠습니다.

0

89

2

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

0

65

1

중급문법 벌크연산에서

0

81

2