63. 스프링으로 게시물 리스트 출력하기

hanahana·2022년 9월 8일
0

Spring 학원수강

목록 보기
13/45
post-thumbnail

오늘이 63일째인데 왜 날짜를 착각했지?

목록을 출력할 jsp만들기

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>자유게시판</title>
</head>
<body>
	<h1 align="center">게시글 목록</h1>
	<br>
	<br>
	<table align="center" border="1">
		<tr>
			<th>번호</th>
			<th>제목</th>
			<th>작성자</th>
			<th>날짜</th>
			<th>조회수</th>
			<th>첨부파일</th>
		</tr>

		<c:forEach items="${bList }" var="board" varStatus="i">
			<tr>
				<td>${i.count }</td>
				<td>${board.boardTitle }</td>
				<td>${board.boardWirter }</td>
				<td>${board.bCreateDate }</td>
				<td>${board.boardCount }</td>
				<td>0</td>
			</tr>
		</c:forEach>

	</table>
</body>
</html>
  • c태그가 필요하다
  • WEB-INF/lib 폴더안에 c태그 라이브러리 4개 파일을 꼭 넣자!
  • <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    • 상단에 c태그 선언을 해줘야 한다!!
  • c:forEach태그를 활용한다.
	<c:forEach items="${bList }" var="board" varStatus="i">
			<tr>
				<td>${i.count }</td>
				<td>${board.boardTitle }</td>
				<td>${board.boardWirter }</td>
				<td>${board.bCreateDate }</td>
				<td>${board.boardCount }</td>
				<td>0</td>
			</tr>
		</c:forEach>
  • controller에서는 select해서 받은 여러개의 열을 List로 반환할것이기에 items에는 반환받은 List를 넣고 var에는 List를 출력할 키워드를 넣는다.
  • var에서 정한 키워드로 board클래스 안에있는 변수명을 활용하여 내용을 출력한다
  • forEach는 itmes안에 있는 값의 길이를 index값의 순서대로 반복해준다.

Controller에서 bList값 받아오기

@RequestMapping(value="/board/list.kh", method =RequestMethod.GET)
	public ModelAndView boardList(ModelAndView mv,) {
		List<Board> bList = bService.printAllBoard();

		if(!bList.isEmpty()) {
			mv.addObject("bList", bList);
			
		}
		
		mv.setViewName("/board/listView");
		
		return mv;

	}
  • RequsetMapping의 value값인 board/list.kh로 접속하면 이 컨트롤러가 실행된다
  • 목록을 출력할것이기에 다른 클래스에 전송할 값은 없다.
  • ModelAndView를 활용하여 setViewName 을 통해 /board/listView.jsp로 이동하게 된다. (리턴이 mv로 설정되었기 때문에)
  • 이에 대해서는 60. 스프링으로 마이페이지 만들기 (velog.io)58. Spring MVC (velog.io)에 설명되어있다.

Service에서 세션값받기

@Override
	public List<Board> printAllBoard() {
		List<Board> bList = bStore.selectAllboard(session);
		return bList;
	}
  • 세션을 전달하여 Store에서 데이터베이스와 연결하게 한다

Store에서 데이터베이스 값 가져오기

@Override
	public List<Board> selectAllboard(SqlSessionTemplate session) {
		List<Board> bList = session.selectList("BoardMapper.selectAllBoard");
		return bList;
	}
  • selectList로 연결한 mapper의 쿼리문을 database와 연결하여 반환값을 받는다
  • 이 경우 select는 여려줄이 출력될테니 List로 반환된다

Mapper

<resultMap type="Board" id="boardResultMap">
<id property="boardNo"			 	column="BOARD_NO"/>
<result property="boardTitle" 		column="BOARD_TITLE"/>
<result property="boardContents" 	column="BOARD_CONTENTS"/>
<result property="boardWirter" 		column="BOARD_WIRTER"/>
<result property="boardFile" 		column="BOARD_FILE"/>
<result property="boardRename" 		column="BOARD_RENAME"/>
<result property="boardFildpath" 	column="BOARD_FILDPATH"/>
<result property="boardCount" 		column="BOARD_COUNT"/>
<result property="bCreateDate" 		column="B_CREATE_DATE"/>
<result property="bUpdateDate" 		column="B_UPDATE_DATE"/>
<result property="bStatus"	 		column="B_STATUS"/>
</resultMap>

<select id="selectAllBoard" resultMap="boardResultMap">
select * from board_tbl where b_status = 'Y' order by board_no desc
</select>
  • 반환한 컬럼의 값을 Board 클래스의 변수로 저장하기 위해 resultMap을 구성한다
    • type은 class의 주소를 적어야 하나 Mybatis-cofig.xml에 미리 지정하여 키워드만 입력하면 된다
  • id는 프라이머리키이다
  • property로 Board의 변수명 column으로 저장할 컬럼이름을 결정한다,.
  • 이러면 이제 100개든 200개든 한 페이지에 모든 게시물이 출력된다
  • 그럼 다음엔 페이징으로!
profile
hello world

0개의 댓글