Springboot/QueryDsl

querydsl +PageRequest

디비드킴 2022. 8. 12. 22:32

페이징 처리시 늘날리던 쿼리가 있었다

"select * ,(select count(*) from baskets where user_id=?)totalCount  from baskets where user_id=? order by basket_id desc limit ?,?"

이런쿼리였는데 좀 갈증이있었다

이렇게 받으면 문제가 많다

 

일단 서브쿼리로인한 낭비

가져온뒤 총페이지 구하기

기타 프론트에서 필요한 정보 가공

 

그러다 문득 회사에서 팀원이 

pageable객체 안쓰세요?라고 했고

아 그거? jpa초반에 쓰고 잊고 있었는데 

그게 뭐 특별한게 있나요?라고 물었다 

솔직히 많이 부끄러웠다

팀원은 아 그거 쓰면 지금 일일이  하는거 다해줘요

라고 했고 구글을 다시 뒤져보았다

 

많은 글을 보았고 

querydsl에 적용했다

여기서 놀라운점 

PageableExecutionUtils에 아주 놀랐다

걱정이였던게 위에 값이 없어도 count쿼리를 날리면 어떡해?

라고 했지만 PageableExecutionUtils가 값이 없으면 쿼리를 날리지 않는다

그리고 page객체이기떄문에

마지막페이지인지/현재페이지등 페이징에 필요한 값을 알아서 정리해서

뽑아준다

 

너무 좋은 최적화라고 느꼈다