728x90
이번 글에선 저번 글에서 작성한 글들의 리스트를 불러오는 기능을 구현합니다.
작성한 글들은 DB에 저장돼있습니다. (DB : MySQL)
* 코드는 https://github.com/wmdwjddyd6/Board-Spring-MVC 에서 확인 가능합니다.
1. View (list.jsp)
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"
language="java"%>
<%@ page session="false"%>
<html>
<head>
<title>목록</title>
</head>
<body>
<h1>게시글 목록</h1>
<table border="1">
<caption>List</caption>
<thead>
<tr align="center" bgcolor="white">
<th>No</th>
<th>제목</th>
<th>작성일</th>
<th>조회수</th>
</tr>
</thead>
<tbody>
<c:forEach var="board" items="${boards}">
<tr align="center" bgcolor="white">
<td><c:out value="${board.id}" /></td>
<td><a href="/board/post?boardId=${board.id}"><c:out value="${board.title}" /></a></td>
<td><fmt:formatDate pattern="yyyy-MM-dd hh:mm"
value="${board.createDate}" /></td>
<td><c:out value="${board.views}" /></td>
</tr>
</c:forEach>
</tbody>
</table>
<br />
<a href="/">메인으로 돌아가기</a>
</body>
</html>
- 첫 줄과 둘째 줄의 taglib을 선언함으로써 기본 jstl(forEach 등)과 fmt 태그를 사용할 수 있게 됩니다.
- 데이터를 보여줄 테이블을 정의하고, Controller에서 전달받은 데이터(List)의 양만큼 반복해서 보여주기 위해 c:forEach를 사용합니다.
- var : 임시로 사용할 변수명
- items : Controller에서 전달받은 Collection 객체 (해당 글에선 List입니다.)
- fmt:formatDate를 통해 화면에 보여줄 날짜 형식을 지정합니다.
- * 추가
- c:out value="${board.title}" : a태그로 감싸서 제목 클릭 시 해당 글로 이동하는 기능 구현을 위해 추가했습니다.
- [3. 게시글 조회] 에서 상세 기능 구현
2. Controller
@Controller
public class BoardController {
private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
@Autowired
private BoardService boardService;
/*
* 게시글 목록 화면 이동
* */
@RequestMapping(method = RequestMethod.GET, value = "/board/list")
public String list(Model model) {
List<BoardDTO> boards = boardService.getList();
model.addAttribute("boards", boards);
return "board/list";
}
}
- 조회 관련 기능으로 GET method를 사용합니다. /board/list url 요청 시 해당 메서드로 매핑됩니다.
- boardService의 getList 함수를 통해 현재 DB에 저장된 모든 게시글 목록을 반환 받습니다.
- model.addAttribute("View로 넘겨줄 변수명", View로 넘겨줄 변수) : 위 1번 View의 forEach의 items부분 입니다.
3. Service
public interface BoardService {
// 게시글 목록 확인
List<BoardDTO> getList();
}
@Service
public class BoardServiceImpl implements BoardService {
private final BoardMapper boardMapper;
@Autowired
public BoardServiceImpl(BoardMapper boardMapper) {
this.boardMapper = boardMapper;
}
@Override
public List<BoardDTO> getList() {
List<BoardDTO> list = boardMapper.selectAll();
return list;
}
}
- getList에서는 boardMapper를 통해 모든 게시글을 List에 담아 Controller로 반환합니다.
4. Mapper (DAO)
public interface BoardMapper {
// 게시글 목록 조회
List<BoardDTO> selectAll();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.spring.shoppingmall.mapper.BoardMapper">
<sql id="boardColumns">
id
,title
,content
,delete_yn
,create_date
,views
,type
</sql>
<!-- 게시글 목록 확인 -->
<select id="selectAll" resultType="com.spring.shoppingmall.model.BoardDTO">
SELECT
<include refid="boardColumns" />
FROM
tb_board
ORDER BY
id desc
</select>
</mapper>
- 게시글 작성 시 마다 Auto-Increment되는 값인 id를 desc(내림차순)으로 조회함으로써, 제일 최근에 생성된 게시글을 제일 앞에 위치하도록 합니다.
'Web > Spring' 카테고리의 다른 글
[Spring MVC] 4. 게시글 수정 (0) | 2022.03.31 |
---|---|
[Spring MVC] 3. 게시글 조회 (0) | 2022.03.29 |
[Spring MVC] 1. 게시글 작성 (0) | 2022.03.22 |
[Spring MVC] org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class java.lang.Integer 해결 (0) | 2022.03.22 |
[Spring MVC] 0. 프로젝트 셋팅 (0) | 2022.03.08 |