[Spring Boot] 09. MyBatis로 게시판 구현하기 -조회편-

하림·2024년 9월 2일

Spring

목록 보기
8/16
post-thumbnail

1. 게시물 조회

1.1 소스코드 작성하기

컨트롤러를 생성합니다. 다음과 같이 com.edu.springboot.MainController.java 파일에 코드를 추가합니다.

// 조회 : 파라미터로 전달되는 idx를 커맨드객체를 통해 받음
@RequestMapping("/view.do")
public String boardView(Model model, BoardDTO boardDTO) {
	boardDTO = dao.view(boardDTO);
	// 가져온 레코드에서 내용 부분은 줄바꿈 처리한다.
	boardDTO.setContent(boardDTO.getContent().replace("\r\n", "<br/>"));
	// 모델에 저장 후 JSP로 포워드
	model.addAttribute("boardDTO", boardDTO);
	return "view";
}

인터페이스를 생성합니다. 다음과 같이 com.edu.springboot.jdbc.IBoardService.java 파일에 코드를 추가합니다.

package com.edu.springboot.jdbc;

import java.util.ArrayList;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/* Controller와 Mybatis Mapper 사이에서 매개역할을 하는 인터페이스로 @Mapper 어노테이션을 부착한다.
 * 컨트롤러는 인터페이스의 추상메서드를 호출하고, 이를 통해 Mapper의 특정 엘리먼트가 호출되어 쿼리문이 실행되는 구조를 가지게 된다. */
@Mapper
public interface IBoardService {
	// 목록 : 게시물의 개수를 카운트(커맨드 객체 사용)
	public int getTotalCount(ParameterDTO parameterDTO);
	// 목록 : 한 페이지에 출력할 게시물을 인출하여 반환(커맨드 객체 사용)
	public ArrayList<BoardDTO> listPage(ParameterDTO parameterDTO);
	/* 작성 : 폼 값을 받은 후 어노테이션으로 통해 이름을 변경하여 Mapper로 전달
	 * Mapper에서는 변경된 이름을 통해 인파라미터를 설정한다. */
	public int write(@Param("_name") String name, @Param("_title") String title, @Param("_content") String content);
	// 열람(커맨드 객체 사용)
	public BoardDTO view(BoardDTO boardDTO);
	// 수정(커맨드 객체 사용)
	public int edit(BoardDTO boardDTO);
	// 삭제
	public int delete(String idx);
}

매퍼를 생성합니다. 다음과 같이 resources/mapper/BoardDAO.xml 파일에 코드를 추가합니다.

<!-- 조회 : 게시물의 일련번호를 DTO를 통해 받은 후 select하고, 결과를 다시 DTO에 저장 후 반환한다. -->
<select id="view"
	resultType="com.edu.springboot.jdbc.BoardDTO"
	parameterType="com.edu.springboot.jdbc.ParameterDTO">
SELECT * FROM myboard WHERE idx=#{idx}
</select>

뷰를 생성합니다. 다음과 같이 webapp/WEB-INF/views/view.jsp 파일에 코드를 추가합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h2>게시판 읽기(Mybatis)</h2>	
	<form name="writeFrm">
		<input type="hidden" name="idx" value="${ boardDTO.idx }" />
	</form>
	<table border="1" width="90%">
	    <colgroup>
	        <col width="15%"/> <col width="35%"/>
	        <col width="15%"/> <col width="*"/>
	    </colgroup>	
	    <!-- 게시글 정보 -->
	    <tr>
	        <td>번호</td> <td>${ boardDTO.idx }</td>
	        <td>작성자</td> <td>${ boardDTO.name }</td>
	    </tr>
	    <tr>
	        <td>작성일</td> <td>${ boardDTO.postdate }</td>
	        <td>조회수</td> <td>${ boardDTO.visitcount }</td>
	    </tr>
	    <tr>
	        <td>제목</td>
	        <td colspan="3">${ boardDTO.title }</td>
	    </tr>
	    <tr>
	        <td>내용</td>
	        <td colspan="3" height="100">
	        	${ boardDTO.content }	        	
	        </td>
	    </tr>
	    <!-- 하단 메뉴(버튼) -->
	    <tr>
	        <td colspan="4" align="center">
	            <button type="button" onclick="location.href='./edit.do?idx=${ param.idx }';">
	                수정하기
	            </button>
	            <button type="button" onclick="deletePost(${ param.idx });">
	                삭제하기
	            </button>
	            <button type="button" onclick="location.href='./list.do';">
	                목록 바로가기
	            </button>
	        </td>
	    </tr>
	</table>
</body>

이제 게시물을 조회할 수 있습니다.


1.2 실행하기

다음과 같이 실행됩니다.

조회할 게시물의 제목을 클릭하면 게시판 상세보기 페이지로 이동합니다.

게시판 조회 기능이 성공적으로 구현되었습니다.

0개의 댓글