Backend/JPA

[JPA] querydsl 정리

findmypiece 2022. 1. 3. 12:26
728x90

select 결과 일부만 가져오기

  1. Projections 을 사용한다.
  2. Projections 을 활용하는 여러가지 방법이 있는데 가장 선호되는 방식은 @QueryProjection 이다.
  3. Projections 으로 읽어온 데이턴느 영속상태가 아니다. 즉, Dirty Checking 을 염려할 필요가 없다.
  4. Projections 은 기본이 즉시로딩이다. 지연로딩은 안되는듯?

 

querydsl 비교식

//Standard              Alternative

expr isNotNull          expr is not(null)
expr isNull             expr is null
expr eq "Ben"           expr === "Ben"
expr ne "Ben"           expr !== "Ben"
expr append "X"         expr + "X"
expr isEmpty            expr is empty
expr isNotEmpoty        expr not empty

// boolean
left and right          left && right
left or right           left || right
expr not                !expr

// comparison
expr lt 5               expr < 5
expr loe 5              expr <= 5
expr gt 5               expr > 5
expr goe 5              expr >= 5
expr notBetween(2,6)    expr not between (2,6)
expr negate             -expr
 
// numeric
expr add 3              expr + 3
expr subtract 3         expr - 3
expr divide 3           expr / 3
expr multiply 3         expr * 3
expr mod 5              expr % 5

// collection
list.get(0)             list(0)
map.get("X")            map("X")

 

querydsl 에서 in 조건에서 사용할 리스트가 비어있을 경우?

mybatis 에서는 in 조건에서 사용할 리스트가 null 이거나 비어있을 경우 Exception 이 발생하기 때문에 in 절 자체를 동적쿼리로 구성했었다. 그런데 querydsl 에서는 in조건에서 사용할 리스트가 null 일 경우 해당 쿼리가 아예 수행되지 않으며 비어있을 경우 in 절 을 자동으로 and 1 = 2 로 치환해 준다.

 

 

 

https://suhwan.dev/2018/12/25/spring-data-jpa-projection-tips/
https://icarus8050.tistory.com/5
https://cheese10yun.github.io/querydsl-projections/
https://seokrae.gitbook.io/sr/spring/spring-jpa/springboot-jpa-querydsl
https://github.com/cheese10yun/blog-sample/blob/master/query-dsl/docs/query-dsl-study.md
http://querydsl.com/static/querydsl/3.5.1/reference/ko-KR/html_single/#alias
728x90