[프로젝트 개선] - 웹사이트 제작 24. (Spring/Java) 이전글 다음글 구현

JINI·2023년 6월 26일
0
post-thumbnail

게시판 이용시 현재글에서 이전글/다음글을 볼 수있게 구현했다.
글 상세보기 페이지 하단에 이전글/다음글이 있고 제목을 클릭하면 해당 글로 이동한다.
이전글과 다음글이 없을 경우 글이 없다는 문구가 표시된다.



⬅️이전글/다음글➡️ 구현


📕게시판 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 함수 이용

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>

만약 이전 글이 없다면 없다는 문구가 표시되고,
이전글이 있다면 글 제목을 불러온다.

다음글도 마찬가지이다.

profile
꾸준히 성장하는 개발자

0개의 댓글