for (Sort.Order order : pageable.getSort()) {
PathBuilder<Object> path = new PathBuilder<Object>(Object.class, order.getProperty());
query.where(builder).orderBy(new OrderSpecifier(com.querydsl.core.types.Order.valueOf(order.getDirection().name()), path));
}
1. 위와 같이 작성할 경우, 프론트에서 as 로 표현하는 값을 내려주면 entity와 무관하게 정렬 가능.
PathBuilder<Entity> entityPath = new PathBuilder(Entity.class, "entity");
2. 위와 같은 형태로 사용할 경우 pageable에 들어가는 변수가 엔티티에 종속된다.
Path<Long> rank = Expressions.numberPath(Long.class, "rank");
3. 위와 같은 형태로 사용할 경우는 엔티티에 종속되지 않지만 클래스를 변수마다 명시해줘야 한다.
2,3 번은 서브쿼리로 다른 테이블의 데이터를 불러왔을때 조회하기에 어렵다. if문으로 갈라야하는 제한이 생긴다.
하지만 1번처럼 작성할경우 프론트와 규칙만 잘 정해서 주는대로 모든걸 처리할 수 있다.
querydsl를 정리하기 위한 프로젝트 생성 후 깃까지 추가할 예정
'Java & Spring Boot' 카테고리의 다른 글
기본 클래스 org.gradle.wrapper.GradleWrapperMain을(를) 찾거나 로드할 수 없습니다. (0) | 2021.11.04 |
---|---|
Querydsl OneToMany 조건 검색, ListPath (0) | 2021.10.20 |
Unknown lifecycle phase ".test.skip=true". (0) | 2021.09.30 |
OS, Process, Thread (0) | 2020.10.08 |
Java -jar 커맨드 명령어 (0) | 2020.09.11 |