Spring
Spring 게시판 2
불도정
2023. 5. 1. 20:02
지난번에 이어서 홈페이지에서 클릭하면 보드 리스트가 나오게 만들어보자
우선 서버에 연결해서 페이지를 열어보면
리스트들이 있는데 이건 jsp에 헤더부분에 있다.
헤더부분을 보자
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- taglib 추가 -->
<nav>
<ul>
<%-- <li><a href="${contextPath}/board/list?type=1">공지사항</a></li>
<li><a href="${contextPath}/board/list?type=2">자유 게시판</a></li>
<li><a href="${contextPath}/board/list?type=3">질문 게시판</a></li>
--%>
<c:forEach var="boardType" items="${boardTypeList}">
<li><a href="${contextPath}/board/list/${boardType.boardCode}">${boardType.boardName}</a></li>
</c:forEach>
<li><a href="#">FAQ</a></li>
<li><a href="#">1:1문의</a></li>
</ul>
</nav>
주석처리한 부분은 기존에 있는 코드이고
forEach 사용한 부분이 새로 설정한 코드이다.
(콘솔창, 페이지 주소 캡쳐하기)
게시판 별로 들어갈수 있게 기능 구현해보자
먼저 BoardController 클래스이다
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import edu.kh.comm.board.model.service.BoardService;
@Controller
@RequestMapping("/board")
public class BoardController {
@Autowired
private BoardService service;
// 게시글 목록 조회
// @PathVariable("value") : URL 경로에 포함되어있는 값을 변수로 사용할 수 있게하는 역할
// -> 자동으로 request scope에 등록됨 -> jsp ${value} EL 작성 가능
@GetMapping("/list/{boardCode}")
public String boardList( @PathVariable("boardCode") int boardCode,
@RequestParam(value = "cp", required = false, defaultValue = "1") int cp,
Model model) {
// 게시글 목록 조회 서비스 호출
// 1) 게시판 이름 조회
// 2) 페이지네이션 객체 생성
// 3) 게시글 목록 조회
Map<String, Object> map = null;
map = service.selectBoardList(cp, boardCode);
model.addAttribute("map", map);
return "board/boardList";
}
}
서비스 인터페이스는 늘 그랬듯이 만들어주고
서비스impl이다
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import edu.kh.comm.board.model.dao.BoardDAO;
import edu.kh.comm.board.model.vo.Board;
import edu.kh.comm.board.model.vo.BoardType;
import edu.kh.comm.board.model.vo.Pagination;
@Service
public class BoardServiceImpl implements BoardService {
@Autowired
private BoardDAO dao;
// 게시판 코드, 이름 조회
@Override
public List<BoardType> selectBoardType() {
return dao.selectBoardType();
}
// 게시글 목록조회 서비스 구현
@Override
public Map<String, Object> selectBoardList(int cp, int boardCode) {
// 1) 게시판 이름 조회 -> 인터셉터 application에 올려둔 boardTypeList 쓸 수 있음
// 2) 페이지네이션 객체 생성(listCount)
int listCount = dao.getListCount(boardCode);
Pagination pagination = new Pagination(cp, listCount);
// 3) 게시글 목록 조회
List<Board> boardList = dao.selectBoardList(pagination, boardCode);
// map 만들어 담기
Map<String, Object> map = new HashMap<String, Object>();
map.put("pagination", pagination);
map.put("boardList", boardList);
map.put("boardCode", boardCode);
return map;
}
}
다음은 DAO
import java.util.List;
import org.apache.ibatis.session.RowBounds;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import edu.kh.comm.board.model.vo.Board;
import edu.kh.comm.board.model.vo.BoardType;
import edu.kh.comm.board.model.vo.Pagination;
@Repository
public class BoardDAO {
@Autowired
private SqlSessionTemplate sqlSession;
/** 게시판 코드, 이름 조회
* @return boardTypeList
*/
public List<BoardType> selectBoardType() {
return sqlSession.selectList("boardMapper.selectBoardType");
}
/** 특정 게시판의 전체 게시글 수 조회 DAO
* @param boardCode
* @return listCount
*/
public int getListCount(int boardCode) {
return sqlSession.selectOne("boardMapper.getListCount", boardCode);
}
/** 게시판 목록 조회 DAO
* @param pagination
* @param boardCode
* @return boardList
*/
public List<Board> selectBoardList(Pagination pagination, int boardCode) {
// RowBounds 객체(마이바티스)
// - 전체 조회 겨로가에서
// 몇 개의 행을 건너 뛰로
// 그 다음 몇 개의 행만 조회할 것인지 지정
int offset = ( pagination.getCurrentPage() - 1 ) * pagination.getLimit();
RowBounds rowBounds = new RowBounds(offset, pagination.getLimit());
return sqlSession.selectList("boardMapper.selectBoardList", boardCode, rowBounds);
}
}
board-mapper.xml의 resultmap과 sql문이다.
결과를 확인해보자
작동이 잘 된다!
다음화에 계속..