Spring boot kim's cafe/게시판만들기

Springboot 게시판만들기!(3) 글검색+페이징 with nativeQuery

디비드킴 2021. 6. 17. 14:31

이제 검색 기능을 만들 건데
제목으로 찾는 검색을 만들 것이다
boardlist 같은 컨트롤러를 하나 더 만들어
준다고 생각하면 된다

controller로가서

controller.java

제목을 받아주고
똑같이 boardlist로 보낸다
한 페이지만 사용하려고
html에 밑에

boardlist.html

search를 따로 또 만들어놨다

이제 직접 페이징을 만들어보자
boarddao로가서

boarddao.java

뭐가 많아졌다
like/limit/order by를
따로따로는 쏠 줄 아는데
한꺼번에 같이 저렇게
jpa 쿼리로 쏘는 법을 모르겠다
"select *from blogboard where title like %?1% order by bid desc limit? 2,? 3"
blogboard에서 title에? 1가 들어가 있는걸 bid로 정렬해 개수별로 들고 온 더
"select count(*) from blogboard where title like %?1%"
이건 이전 글에서 봤던 totalpages를 구하기 위해 던진다
"select *from blogboard where title like %?1% order by bid desc"
이건 totalpage가 pagesize보다 작으면 페이징이 일어나지 않기 때문에
그때 던지는 건데 사실 이렇게 굳이 안 나눠도 된다

boardservice로가서

boardserive.java

이게 totalpage를 구하는 방법인데
총 글 개수/페이지 사이즈 하고
만약 나머지가 있다면
한 페이지가 더 필요하므로
++해주면 된다!

그리고 그걸 가지고 이제
보드들을 들고 오는 함수를 만들자

boardservice.java


fisrt=(page-1)*pagesize+1;
end=fisrt+pagesize-1;
array=boarddao.findByTitleLikeOrderByBidLimitNative(title,fisrt-1,end-fisrt+1);
이 공식은 예전에 jdbc 강의에서 본 공식이다
totalpage가 1보다 크다면 페이징이 일어나야 하므로
boarddao.findByTitleLikeOrderByBidLimitNative(title,fisrt-1,end-fisrt+1);가고
1보다 작으면 내가 제한한 범위보다 작으므로
한 페이지 안에 다 들어온다

이제 controller로가서

controller.java

쌍둥이 같다 boardlist랑
합칠 수 있는데
이전 그냥 /auth/boardlist처럼
title에 default null 해주고
밑에 조건문
if(title==null) 이런식로 해주면 될 거 같긴 한데

controller.java

이렇게 합쳤다 뭔가 좀 너져분해진 거 같다

'5'로검색

하나만 존재함

"번째"로검색

이건 "번쨰"

이로서 검색+페이징 끝!

이제 다음번엔 글 보기/수정/삭제를
만들어보자!