스프링 프로젝트 - 2일차

BroJang·2022년 11월 4일

스프링

목록 보기
8/10

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

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>

다시 실행 결과

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

profile
끊임없이 배우고 진보하는 백엔드 개발자입니다. 배움에 있어서 최선을 다하자!

0개의 댓글