등록 이후 리스트에서 내용을 확인하기 위해 조회 기능 추가

BoardMapper에 searchList 메소드 추가 (값을 하나만 불러올 것이기 때문에(vo 값) BoardVO 타입 리턴, 게시글 번호를 기준으로 조회 -> int bNo)
Mapper.xml에 쿼리를 추가해준다.
<!-- 게시글 조회 -->
<select id="searchOneList" resultType="com.brojang.model.vo.BoardVO">
SELECT * FROM BOARD_TB WHERE BNO = #{bNo}
</select>
해당 쿼리가 정상적으로 작동되는지 테스트하기 위해 MapperTest에 Test 코드를 작성한다.
@Test
public void testSearchOneList() {
// select * from board_tb where bno = 1;
int bNo = 2;
log.info("테스트 결과 : "+mapper.searchOneList(bNo));
}

정상적으로 값을 조회해온것을 확인하였다.
Service에서 조회 메서드 추가

ServiceImpl 클래스에서 searchList 메서드를 implements 시켜준다.

서비스 기능이 정상적으로 작동하는지 확인하기 위해 서비스 메서드 테스트

결과

Controller 코드 작성
/**
* 게시글 조회
*/
@GetMapping("/searchOneList")
public void searchOneList(int bNo, Model model) {
model.addAttribute("list", boardService.searchOneList(bNo));
}
코드 구현을 하면서 Model에 대해서 좀더 자세히 알고 싶어 찾아보다가 아래 글을 보고 좀더 쉽게 이해할 수 있었다.
Model 링크
기존 리스트 JSP 에서 a태그로 제목을 눌러 접근할 수 있도록 바꿔준다.
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%request.setCharacterEncoding("UTF-8"); %>
<%@ page session="false" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>게시글 리스트</title>
</head>
<body>
<div>
<table border="1px solid black">
<thead>
<tr>
<th>번호</th>
<th>제목</th>
<th>작성자</th>
<th>작성일</th>
<th>조회수</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="list">
<tr style="text-align: center;">
<td><c:out value="${list.bNo}" /></td>
<td>
<a href="/board/searchOneList?bNo=${list.bNo }"><c:out value="${list.bTitle}" /></a>
</td>
<td><c:out value="${list.bWriter}" /></td>
<td><c:out value="${list.bRegDate}" /></td>
<td><c:out value="${list.bHitCount}" /></td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</body>
</html>
상세페이지를 위한 searchOneList.jsp 파일을 생성하고 코드 작성
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<%@ page session="false"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>${list.bTitle}</title>
</head>
<body>
<div>
<table border="1px solid black">
<tbody>
<tr style="text-align: center;">
<td>
<label>번호</label>
</td>
<td>
<input name="bNo" readonly="readonly" value='<c:out value="${list.bNo}" />'>
</td>
</tr>
<tr>
<td>
<label>제목</label>
</td>
<td>
<input name="bTitle" value='<c:out value="${list.bTitle}" />' readonly="readonly">
</td>
</tr>
<tr>
<td>
<label>작성자</label>
</td>
<td>
<input name="bWriter" value='<c:out value="${list.bWriter}"/>' readonly="readonly">
</td>
</tr>
<tr>
<td>
<label>작성일</label>
</td>
<td>
<input name="bRegDate" value='<c:out value="${list.bRegDate}" />' readonly="readonly">
</td>
</tr>
<tr>
<td>
<label>조회수</label>
</td>
<td>
<input name="bHitCount" value='<c:out value="${list.bHitCount}" />' readonly="readonly">
</td>
</tr>
</tbody>
</table>
<a href="/board/list">메인페이지로</a>
</div>
</body>
</html>
결과
메인페이지 화면

상세페이지 화면


여기서 리스트와 상세페이지 작성일이 너무 길게 표현이 되어있어, 포맷으로 표현 방식을 바꿔야겠다.
기존 jsp 파일을 아래와 같이 변경하였다.
<tr>
<td>
<label>작성일</label>
</td>
<td>
<fmt:formatDate pattern="yyyy-MM-dd" value="${list.bRegDate}" />
</td>
</tr>
다시 실행 결과


정상적으로 출력되는 것을 확인하였다.