[Spring] 스프링 게시판 만들기 - 상세보기(조회수)

<p>[Spring] 스프링 게시판 만들기 - 상세보기(조회수)

게시판 목록을 출력하는 방법까지 알아보았다. 이제 글작성 기능을 구현하는 방법에 대해 알아본다.

게시판 목록에서 특정 글을 보기 위해선 해당 글을 식별할 수 있는 값이 필요하다.

SQL문으로 데이터 가져오기

본 포스팅에서 사용하는 테이블 구조는 위와 같다.
PK(기본키)로 지정된 컬럼(SEQ)를 이용해 게시글을 식별한다.

<tr>
  <td>${list.seq }</td>
  <a href='detail?seq=${list.seq }'><td>${list.title }</td></a>
  <td>${list.writer }</td>
  <td><fmt:formatDate value="${list.regdate }" pattern="yyyy.MM.dd"/> </td>
  <td>${list.cnt }</td>
</tr>

우선 boardList.jsp 파일 일부를 위와 같이 수정해준다.
a태그로 링크를 걸어 seq 파라미터를 GET방식으로 넘기는 코드이다.
이렇게 넘긴 파라미터를 컨트롤러에서 받아 사용한다.

<!-- 글 상세조회 -->
<select id="viewDetail" resultType="com.my.spring.domain.BoardVO" parameterType="int">
  SELECT * FROM BOARD WHERE SEQ = #{seq}
</select>

BoardMapper.xml에 상세 조회를 하기 위한 sql문을 작성해준다.

// 게시글 상세보기
public BoardVO viewDetail(int seq);

BoardMapperBoardService 인터페이스에 위 메소드를 작성한다.

@Override
public BoardVO viewDetail(int seq) {
  return mapper.viewDetail(seq);
}

BoardServiceImpl 클래스에 메소드를 Override해준다.

@GetMapping("detail")
public String viewDetail(Model model, 
                        @RequestParam("seq")int seq
                        // BoardVO vo
                        ) {
  
  model.addAttribute("board", boardService.viewDetail(seq));
  //model.addAttribute("board", boardService.viewDetail(vo.getSeq()));

  return "board/viewDetail";
}

MainController에 위 메소드를 작성해준다.
@GetMapping어노테이션은 GET방식의 url요청만 매핑해주는 어노테이션이다.
@RequestParam어노테이션은 View단에서 seq라는 이름으로 넘긴 파라미터를 받아준다.
@RequestParam으로 받는 방식도 있고, VO타입을 지정해주면 그에 맞는 파라미터를 스프링에서 매치해 넣어주기때문에 위의 주석부분처럼 사용하는 방법도 있다.

화면단에 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>글 상세보기</title>
</head>
<style>
	h2 { text-align: center;}
  table { width: 100%;}
  textarea { width: 100%;}
 	#outter {
		display: block;
		width: 30%;
		margin: auto;
	}
</style>
<body>

<h2>게시판</h2>
<br><br><br>
<div id="outter">
	<table border="1">
		<tr>
			<td>제목: ${board.title }</td>
		</tr>
		<tr>
			<td>
				작성자: ${board.writer }
				<span style="float: right;"><fmt:formatDate value="${board.regdate }" pattern="yyyy.MM.dd"/></span>
			</td>
		</tr>
		<tr>
			<td><div style="height: 300px; margin: 10px; display: inline-block">${board.content }</div></td>
		</tr>
	</table>
	<input type="button" value="글 목록" style="float: right;" onclick="location.href='board';"> 
</div>
</body>
</html>

views폴더에 viewDetail.jsp파일을 만들고 위 내용을 작성해준다.
이제 프로젝트를 실행시켜본다.

‘루트/board’로 들어가보면 제목부분에 링크가 걸려있다.

제목을 클릭하면 상세 페이지가 나오고 글 목록 버튼을 누르면 다시 목록으로 돌아온다.

조회수 올리기

이제 제목 클릭시 조회수를 1씩 올리는 작업을 해보자.

<!-- 조회수 +1 -->
<update id="plusCnt" parameterType="int">
  UPDATE BOARD SET CNT = CNT + 1 WHERE SEQ = #{seq}
</update>

BoardMapper.xml에 sql문을 작성해준다.

// 조회수 +1
public boolean plusCnt(int seq);

BoardMapperBoardService 인터페이스에 위 메소드를 작성해준다.

@Override
public boolean plusCnt(int seq) {
  return mapper.plusCnt(seq);
}

BoardServiceImpl 클래스에 위 메소드를 Override 해준다.

@GetMapping("detail")
public String viewDetail(Model model, @RequestParam("seq")int seq) {
  
  model.addAttribute("board", boardService.viewDetail(seq));
  
  //조회수 +1
  boardService.plusCnt(seq);
  
  return "board/viewDetail";
}

이제 MainController 컨트롤러에서 조회수를 올리는 sql문을 호출해주면 끝이다.
프로젝트를 실행하여 글 상세보기로 간 후 목록으로 돌아오면 조회수가 올라간것을 볼 수 있다.


© 2018. All rights reserved. Polog by Soowan Kim.

Powered by Hydejack v8.2.0