Hansel
Querydsl 기초 문법 1 본문
Jpql과의 차이

작성하는 쿼리 자체는 매우 유사하다.
조건식의 경우 스프링 데이터 JPA의 쿼리메서드 작성 방식과 유사하다는 느낌이 들었다.
Q클래스 사용

첫 라인과 같이 직접 변수로 선언하여 사용하거나,
두번째 라인과 같이 정적 변수를 사용하는 방법이 있다.
첫번째 방법과 같이 alias를 사용하는 방식은 셀프조인이 필요한 경우 사용된다.

조건절
http://querydsl.com/static/querydsl/4.1.0/apidocs/com/querydsl/core/types/dsl/Expressions.html
Expressions (Querydsl 4.1.0 API)
querydsl.com
위 링크에서 레퍼런스를 참고할 수 있다.
조건절에 사용되는 메서드는 NumberExperssion, BooleanExpression을 참고하면 된다.



위 사진과 같이 and가 아닌 ',' 로 묶을 경우 자동으로 and 처리한다.

위 사진에서 fetchResults와 count는 deprecate 되어 현재는 사용이 권장되지 않는다.
fetch() : 리스트 조회, 데이터 없으면 빈 리스트 반환
fetchOne() : 단 건 조회
결과가 없으면 : null
결과가 둘 이상이면 : NonUniqueResultException
데이터 정렬

데이터 정렬은 sql 문법에 맞게 desc, asc 등을 사용하면 된다.

다중 정렬 조건 또한 sql 작성 방식을 생각하면 간단하다.
집계함수와 집합

집계함수 또한 SQL에 맞게 작성해주면 된다.

Group By 또한 집합의 대상이 되는 애트리뷰트를 명시해주고 적절한 집계 함수를 통해 사용해 줄 수 있다.
SQL 작성이야 어렵지 않지만 뜬금없이 등장한 Tuple이 궁금하다.

자바8의 문법인가? 생각했지만 쿼리Dsl에서 제공하는 인터페이스이다.
프로젝션 결과에 사용되는 제네릭 타입이다.
프로젝션 결과는 수직적이다.
실렉션이라면 List<Entity> 형식으로 받을 수 있겠지만,
프로젝션에 조인이 사용되었다면 다양한 릴레이션이 하나로 묶여 단순 List로 받기 어렵다.
데이터베이스 관점에서 바라본다면 문제없지만 객체지향에 맞게 바라본다면 문제가 생긴다.
튜플에 저장되는 순서는 select 절의 순서에 따른다.
select(member.age.avg(),team.name)
위와 같은 select 절이 호출된다면, (나이의 평균, 팀 이름)을 한 쌍으로 지닌 튜플 리스트가 반환된다.
호출은 해당 엔티티의 필드 명을 명시하면 된다.
'Spring > Querydsl' 카테고리의 다른 글
| QueryDsl 활용 1 (0) | 2022.07.27 |
|---|---|
| Querydsl 기초 문법 2 (0) | 2022.07.25 |
| Querydsl / 적용 (0) | 2022.07.21 |