Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

게으른 완벽주의자의 개발자 도전기

[board] 게시글 등록(sequence), 상세조회하기 본문

Spring Boot

[board] 게시글 등록(sequence), 상세조회하기

머리방울 2022. 9. 12. 16:33

1. mapper

 게시글 등록 
<insert id="regBoard">
INSERT INTO SPRING_BOARD
		(BOARD_NUM
		,TITLE
		, WRITER
		, CONTENT
		) VALUES(
		BOARD_NUM_SEQ.NEXTVAL
		, #{title}
		, #{writer}
		, #{content}
 		)

</insert>

 상세페이지
<select id="boardDetail" resultMap="board">
SELECT BOARD_NUM
	, TITLE
	, CONTENT
	, WRITER
	, TO_CHAR(CREATE_DATE, 'YYYY.MM.DD') AS CREATE_DATE
FROM SPRING_BOARD
WHERE BOARD_NUM = #{boardNum}

</select>

sequence

CREATE SEQUENCE BOARD_NUM_SEQ
START WITH 1
INCREMENT BY 1
NOCACHE;

(시퀀스 사용하다보면 갑자기 숫자가 +20이 될 때가 있다.
그때 NOCACHE를 사용하여 방지 가능하다)

다음 BOARD_NUM 검색하기
SELECT BOARD_NUM_SEQ.NEXTVAL FROM DUAL;

시퀀스 테이블 삭제
DROP SEQUENCE BOARD_NUM_SEQ;

2. 인터페이스, serviceimpl

게시글등록
void regBoard(BoardVO board);


상세페이지
BoardVO	boardDetail(int boardNum);


게시글 등록
@Override
public void regBoard(BoardVO board) {
		
	sqlSession.insert("boardMapper.regBoard", board);
}
	
상세페이지
@Override
public BoardVO boardDetail(int boardNum) {
	return sqlSession.selectOne("boardMapper.boardDetail", boardNum);
	 
}

3. controller

게시글 등록
@PostMapping("/regBoard")
	
 ★커맨드 객체 (BoardVO boardVO)
 1. 넘어오는 데이터를 받는 역할 2. 데이터를 다음 페이지에 넘기지 않아도 자동으로 넘어감
데이터가 넘어갈 때 이름은 클래스명에서 앞글자만 소문자로 바뀐 이름으로 넘어간다
	
public String regBoard(BoardVO board) {
	(매개변수에 form태그로 넘겨온 데이터 받음(BoardVO안에 변수명과 같으면 받아온다))
	boardService.regBoard(board);
		
	return "board/reg_alert";
}


상세보기 페이지 
@GetMapping("/boardDetail")

넘어오는 데이터의 이름과 매개변수의 이름을 일치시키면 매개변수에 자동으로 데이터가 넘어온다
 
매개변수에 @RequestParam 사용 시 넘어오는 데이터에 대한 설정 할 수 있다
@RequestParam(required = false 또는 true) - 넘어오는 데이터의 필수 여부 지정 

1) (required = false, defaultValue = "10")
->넘어오는 데이터가 없을 때 기본값으로 10 넣어 줘(기본값 지정)
2) (name = "num") 넘어오는 데이터의 이름과 매개변수 이름이 다를 때 사용하여 바인딩 시킨다
 -> 이름이 num으로 넘어오는 데이터를 boardNum에 넣어달라

	public String boardDetail(@RequestParam(required = false, defaultValue = "10"
    , name = "num") int boardNum, Model model) {
		
		상세정보 조회
		boardService.boardDetail(boardNum);
		
		데이터 보내기
		model.addAttribute("boardDetail", boardService.boardDetail(boardNum));
		return "board/board_detail";
	}

 

4. Html

1) 글쓰기

<h3 align="center">글쓰기</h3>

<form action="/board/regBoard" method="post">
	<table border="1">
	<tr>
		<td>제목 </td>
		<td> <input type="text" name="title">  </td>
		<td>작성자</td>
		<td> <input type="text" name="writer"> </td>
		
	</tr>
    <tr>
     	<td>내용</td>
     	<td colspan="3"> <textarea rows="5" cols="6" name="content"></textarea></td>
    </tr>
	</table>
	
	<div align="center" >
	<input type="submit" value="등록하기">
	</div>
</form>

</body>

2) 상세조회

<h2 align="center">상세페이지</h2>

 <table>
	<tr>
		<td>글번호</td>
		<td th:text="${boardDetail.boardNum}"></td>
		<td>글제목</td>
		<td th:text="${boardDetail.title}"></td>
		<td>작성일자</td>
		<td th:text="${boardDetail.createDate}"></td>
		<td>작성자</td>
		<td th:text="${boardDetail.writer}"></td>
	</tr>
	
	<tr>
		<td>내용</td>
		<td colspan="7" th:text="${boardDetail.content}"></td>
	</tr>
	
</table>

<div align="center">

	<input type="button" value="목록" th:onclick= "|location.href='@{/board/list}'|">
	<input type="button" value="수정"  th:onclick="|location.href ='@{/board/modifyForm(boardNum=${boardDetail.boardNum})}'|">
	<input type="button" value="삭제" th:onclick="|location.href ='@{/board/delete(boardNum=${boardDetail.boardNum})}'|">
</div> 
</body>