projecrt2 Querydsl(JPQLQuery)적용

Shaun·2021년 8월 14일
0

project

목록 보기
9/9

Querydsl

querydsl 기본설정은 저번에 포스팅한적이 있어서 생략하겠다.

Repository 확장

  • 쿼리메서드나 @Query 등으로 처리할수 없는 기능은 별도의 인터페이스로 설계

  • 위에서 언급한 인터페이스에 대한 구현 클래스를 작성한다. 이떄 QuerydslRepositorySupport라는 클래스를 부모 클래스로 사용

  • 구현 클래스에 인터페이스의 기능을 Q도메인 클래스와 JPQLQuery를 이용해서 구현

QuerydslRepositorySupport 클래스는 Querydsl라이브러리를 이용해서 직접 무언가를 구현할떄 사용한다.

  • 추가된 패키지에는 확장하고 싶은 기능을 인터페이스로 선언한다.

  • 인터페이스를 구현하는 클래스를 만들어주고 QueryRepositorySupport 를 상속한다는것도 잊지말자.

  • QueryRepositorySupport는 생성자가 존재하므로 super()를 이용해서 호출해야한다.

JPQL Query 객체

  • Querydsl 라이브러리 내에 JPQLQuery라는 인터페이스를 활용한다.

JPQLQuery의 Join 문/Tuple 객체

  • querydsl 처럼 q도메인을 생성해준다. 쿼리작성 코드가 좀 생소할지 몰라도 자세히 보다보면 어느정도 감이 온다.

  • select() 내에 여러 객체를 가져오는 형태로 변경되었다. 이렇게 정해진 엔티티 객체 단위가아니라 각각의 데이터를 추출하는 경우Tuple라는 객체를 이용한다.

  • 결과는 List에 담아준다.

JPQLQuery 로 page<Object[]>처리

  • serach Repsitory를 만들어서 메서드를 추가해준다. 파라미터는 검색에 사용될 type 과 keyword와 page정렬을 위한 pageable을 받아준다.

  • JPQLQuery를 써서 테이블들을 불러준다.

  • 검색 조건에 사용될 querydsl 기본 booleanBuilder 과 booleanExpression 을 만들어준다.

  • querydsl 로 검색 조건을 만들어 준다.

  • jpql로 만들어둔 테이블(3개합친것) + 검색조건 +gorupBy(게시판에 한줄로 표시하기위한)

※ 정리를 해보면 앞에서는 @Query로 테이블을 불러왔지만 여기서는 JPQLQuery로 테이블을 불러와 적용을 해보았다. 두 녀석의 차이점은 JPQLQuery는 좀 더 디테일한 세부정보만 모아서 추출이 가능하다는 점이다.

Sort처리 /count 처리

pageable의 Sory객체는 JPQL의 orderBy의 파라미터로 전달되어야 하지만 JPQL에서는 Sort객체를 지원하지 않기 떄문에 orderBy()의 경우 OrderSpecifier<T extends Comparable,> 울 파라미터로 처리해야한다.


  • sort 는 내부적으로 여러개의 Sort객체를 연결 할수있기 때문에 forEach()를 이용해서 처리한다
  • OrderSpecifier에는 정렬이 필요하므로 Sort객체의 정렬 관련 정보를 com.querydsl.core.types.Order 타입으로 처리하고 Sort 객체에 속성(bno,title)등은 PathBuilder라는 것을 이용해 처리한다.

  • fetchCount() 를 이용해 count 쿼리도 같이 처리 가능하다.

Pagelmpl 페이지

  • 매개변수로 Pageable 타입을 받은 이유는 JPQLQuery의 offset() 과 limit()을 사용해 페이지 처리를 해주기 위함이다.

  • searchPage()의 리턴 타입은 Page<Object[]> 이므로 메서드의 내부에서 Page타입의 객체를 생성해야한다.

  • page는 인터페이스타입이므로 PageImpl클래스를 이용해서 생성한다.

  • PageImpl 클래스의 생성자에는 Pageable과 long값을 이용하는 생성자가 존재한다.

목록 화면 검색 처리

  • form 태그의 action 만 /board/list 로 변경해주고 BoardServiceImple 클래스만 변경하면 된다.
profile
호주쉐프에서 개발자까지..

0개의 댓글

관련 채용 정보