본문 바로가기
공부/QueryDSL

QueryDSL 공부하기 - 1

by 고구밍 2022. 5. 10.

https://youtu.be/zMAX7g6rO_Y

 

 

 

 

적재된 Querydsl-jpa

상속 / impl 사용하지 않기

-> 꼭 무언가를 상속 / 구현 받지 않더라도

-> 꼭 특정 Entity를 지정하지 않더라도 Querydsl을 사용할 수 있는 방법

 

JPAQueryFactory만 있으면 Querydsl은 사용할 수 있다. (~ 2:55)

동적쿼리를 사용할 때

불리언 쿼리를 사용하게 됨

-> 어떤 쿼리인지 알 수 없음

 

메소드로 만들어서 해당값이 null이 나오면 자동으로 없애준다. (명시적인 형식)

-> BooleanExpression null반환시 자동으로 조건절에서 제거 된다.

성능개선 select절

 

 

금지! -> exist -> 실제로 count으로 실행이 된다.

-> exists가 빠른 이유는 조건에 해당하는 row 1개만 찾으면 바로 쿼리를 종료하기 때문!

-> 직접 구현하자. -> limit 1로 조회 제한하기

 

 

cross Join 회피

나올 수 있는 모든 경우의 수를 고려해야되기 때문에,

묵시적 Join ->

 

 

Entity 보다는 Dto를 우선

불필요한 쿼리 발생 (모든 부가적 옵션 발생)

Entity 조회 -> 실시간으로 Entity 변경이 필요한 경우

Dto 조회 -> 고강도 성능 개선 or 대량의 데이터 조회가 필요한 경우

 

 

조회 컬럼 최소화하기

as 표현식으로 대체할 수 있음, as컬럼은 select에서 제외된다.

 

 

select 컬럼에 Entity 자제

-> 사용하지도 않는 컬럼들임에도 조회가 됨

-> N+1 무조건 발생

-> 반대편 Entity의 ID만 있으면 된다.

 

 

JPQL은 from절의 서브쿼리를 지원하지 않는다.

-> 커버링 인덱스 조회는 나눠서 진행

Cluster Key (PK)를 커버링 인덱스로 빠르게 조회하고,

조회된 Key로 Select 컬럼들을 후속 조회한다.

 

 

DrityChecking

업데이트 최적화 -> 16분

 

진짜 Entity가 필요한게 아니라면

<Querydsl과 Dto를 통해 딱 필요한 항목들만 조회하고 업데이트 한다>

 

 

Bulk Insert는 자제한다.

TypeSafe 한 방식으로 Bulk Insert를 처리할 순 없을까?

 

 

 

Querydsl != Querydsl-JPA 다른거다 -> 강의에서 이야기하는 것은 Querydsl-JPA 

 

 

 

 

EntityQL프로젝트?

Gradle 5이상 필요

어노테이션 (name="")필수

int, double, boolean 등을 사용할 수 없다.

복잡함

@Embedded 미지원

 

 

 

 

<jpa와 db공부 같이하기>

'공부 > QueryDSL' 카테고리의 다른 글

QueryDSL 공부하기 - 4 ( DTO조회 )  (0) 2022.05.13
QueryDSL 공부하기 - 3  (0) 2022.05.11
QueryDSL 공부하기 - 2  (0) 2022.05.11