게시판 이용시 현재글에서 이전글/다음글을 볼 수있게 구현했다.
글 상세보기 페이지 하단에 이전글/다음글이 있고 제목을 클릭하면 해당 글로 이동한다.
이전글과 다음글이 없을 경우 글이 없다는 문구가 표시된다.
📕게시판 DTO
private int prevNum; //이전글의 글번호
private int nextNum; //다음글의 글번호
private String prevTitle; //이전글의 제목
private String nextTitle; //다음글의 제목
이전글과 다음글을 담을 변수를 추가한다.
📕Service
public void reviewDetail(int reviewNum, Model model) {
...
model.addAttribute("prevNext",mapper.prevNext(reviewNum));
}
이전글/다음글은 글 상세보기 페이지로 가져와야 하기 때문에 글 상세보기 코드에 추가한다.
📕mapper
public boardDTO prevNext(int reviewNum);
LEAD, LAG 함수를 이용해 글 번호를 기준으로 이전, 다음 데이터를 반환해오는 쿼리문을 작성한다.
📕xml
<select id="prevNext" resultMap="board" resultType="Integer">
select * from (select list_num, title,
LAG(list_num, 1,0) OVER(ORDER BY list_num ) prevNum,
LAG(title, 1, '이전글이 없습니다') OVER(ORDER BY list_num ) prevTitle,
lead(list_num,1,0) over (order by list_num )nextNum,
lead(title,1,'다음글이 없습니다') over (order by list_num ) nextTitle
from box_board )where list_num=#{reviewNum} order by list_num
</select>
SELECT 조회할 컬럼명
LAG/LEAD(대상 컬럼명) OVER (ORDER BY 대상 컬럼명 정렬기준)
AS 별칭 FROM 테이블명**
✔️ lag('컬럼명' , '몇번째' , '기본값(null일 경우 들어가는 값)')
➡︎ 기준 데이터의 이전행의 데이터를 가져온다.
글 번호를 기준으로 정렬되고 1씩 이동하며 이전 글번호와 그에 맞는 글 제목을 가져오는데
이전글이 없는 null일 경우 들어가는 값은 '이전글이 없습니다'이 된다.
✔️ lead('컬럼명','몇번째','기본값(null일 경우 들어가는 값)')
➡︎ 기준 데이터의 다음행의 데이터를 가져온다.
다음행의 데이터를 가져온다.
이 함수 역시 LAG함수와 동일하게 적용된다.
📕JSP
<div class="preNext">
<div>
<hr>
<span>이전글</span>
<c:choose>
<c:when test="${prevNext.prevNum ==0}">
<span style="color: gray;">이전글이 없습니다.</span>
</c:when>
<c:otherwise>
<span class="prevTitle"><a
href="${contextPath }/board/reviewDetail?reviewNum=${prevNext.prevNum}">${prevNext.prevTitle}</a></span>
</c:otherwise>
</c:choose>
</div>
<hr>
<div>
<span>다음글</span>
위 코드와 동일
</div>
</div>
만약 이전 글이 없다면 없다는 문구가 표시되고,
이전글이 있다면 글 제목을 불러온다.
다음글도 마찬가지이다.