블로그 초반에 서 언급한듯이 내가 몰랐던점 이나 새로 알게된 사실에 대해서만 포스팅 할 예정이다.
레퍼지토리에 쿼리문을 직접 작성하며 직접 db에서 데이터를 가져온다.
결과를 반환하는 반환 타입에는 크게 List , Optional , 단독엔티티 가 있다.
보통은 엔티티에서 나온값을 엔티티에 넣어서 바로 반환하지는 않고 dto에 넣어서 반환한다. 그 이유는 엔티티로 그대로 반환하고 나중에 엔티티가 변경이 되면 api 컨디션도 다바뀌어서 에러를 유발하기 때문!
위에 사진은 내가 @Query 을 두번쨰 공부하면서 새로 알게된 사실이다.
1. 쿼리문에서 바로 dto로 넣어서 반환할 수 있다.(dto위치 자세히 적기)
2. collection 타입으로 in절 지원 (여러 조건을 한번에 조회) 할수 있다.
결과가 없으면?????????
1. collection = 빈컬렉션 반환 (null체크 필요없다)
2. 단건 = null
기본적으로 pageable 인터페이스를 구현한 pageRequest 를 사용한다.
반환 타입으로는 보통 page,이지만 slice, List 도 가능하다.
@Query + pageable
페이징조건 만들기 ->조건사용해서 데이터추출-> dto로 바로 변환가능(map)
count쿼리까지 같이 가져온다. (join문 테이블(카운트 쿼리)도 가져온다)
위에랑 이유가 같다 . 엔티티를 바로 반환 x dto로 변환 반환 o
토탈페이지를 page처럼 가져오는게 아니라 다음페이지가 있어 없어? 리미트 1+
page( count o)
slice (count x)
List( count x)
데이터는 left join, 카운트는 left join 안해도됨
-> page 는 카운트쿼리까지 가져오므로 간단한건 괜찮은데 join이 많으면 카운트쿼리 또한 join을 다해서 가져온다 = 성능저하
-> 사실 카운트쿼리는 join이 필요없다 어자피 옆에 붙는 테이블(조인이)없어도 개수는 같기때문에 join이 많으면 카운트쿼리는 때야 성능향샹
전체 카운트 쿼리는 매우 무겁다