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문이다.

결과를 확인해보자

 

작동이 잘 된다!

 

다음화에 계속..