-
[무한댓글 게시판] 5. CRUDSpring Boot 2024. 2. 19. 17:00
소셜 게시판 로그인을 먼저 해주었다.
그리고 게시판으로 가자.
게시글 상세 페이지 이동
글 번호를 누르면 해당 상세페이지로 이동을 한다
해당 게시글의 board_id 컬럼 값을 전달 해주어 받아서 해당 게시글의 상세페이지를 반환 한다.
로직은 아래와 같다.
BoardController.java
우선 controller다.
BoardSevice.java
@RequestParam으로 board_id 컬럼을 요청해서 변수 board_id로 넣어줘서 사용을해서 해당 BoardService에 만들어둔 selectDetail 메서드로 해당 게시글을 반환하는 변수를 만들어서 model.attribute로 boardDetail에 넣어주었다. 따라서 jsp파일에서 boardDetail을 사용할수 있게 되었다.
boardDetail.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>소셜로그인 게시판</title> </head> <body> <div id="wrap"> <h2>게시글 상세페이지</h2> <table> <c:if test="${not empty requestScope.boardDetail}"> <tr height="40"> <th>게시글 번호</th> <td>${requestScope.boardDetail.board_id}</td> </tr> <tr height="40"> <th>게시글 제목</th> <td>${requestScope.boardDetail.board_title}</td> </tr> <tr height="40"> <th>게시글 내용</th> <td>${requestScope.boardDetail.board_content}</td> </tr> <tr height="40"> <th>작성자</th> <td>${requestScope.boardDetail.useremail}</td> </tr> <tr height="40"> <th>등록일</th> <td>${requestScope.boardDetail.board_regdate}</td> </tr> <tr height="40"> <th>좋아요수</th> <td>${requestScope.boardDetail.board_likes}</td> </tr> <tr height="40"> <th>조회수</th> <td>${requestScope.boardDetail.board_views}</td> </tr> <tr height="40"> <th>게시글 수정일자</th> <td>${requestScope.boardDetail.board_moddate}</td> </tr> </c:if> </table> <div> <a href="boardModify?board_id=${requestScope.boardDetail.board_id}">수정하기</a> </div> <div class="home-link"> <a href="boardPage">게시판 목록</a> </div> <div class="home-link"> <a href="/home">Home</a> </div> </div> </body> </html>
${requestScope.boardDetail.컬럼명}으로 board_id값에 해당하는 게시글의 컬럼을 반환할 수 있었다.
1. 새글 작성
새글을 작성하는 페이지(jsp)와 그에 맞는 로직을 작성해보자.
BoardController.java
우선 새글 등록 페이지로 가는 getBoardInsert 메서드이다. 메서드 구현부분은 넣지 않아 간단하여 설명은 생략하겠다.
jsp 파일에서 form데이터를 post(Action)으로 값을 넘겨주기 때문에 @PostMapping으로 값을 받아온다.
uri 변수를 생성해주고
새로 작성된 게시글은 board_delyn 속성을 'N'으로 설정되게 해주었다. (글 삭제여부 옵션)
entity.setBoard_regdate(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); int savedId = boardService.save(entity);
등록된 글의 등록일을 우선 entity에 저장을 해주었다.
그리고 그 값이 0보다 크면 (=값이 있으면) 등록이 되게끔 로직을 짜주었다.
시연동영상
2. 글 수정
BoardController.java
우선 수정페이지로 가는 getBoardModify 메서드이다. 게시글 상세페이지 로직이랑 동일하여 상세설명은 생략하겠다.
역시나 jsp 파일에서 form데이터를 post(Action)으로 값을 넘겨주기 때문에 @PostMapping으로 값을 받아온다.
수정된 데이터를 updateBoard에 넣어주었다. updateBoard에 값을 save 메서드로 저장해주고
그 값이 0보다 크면 (무결성이 깨지면, 수정데이터가 있다면) board_moddate 속성이 수정날짜로 업데이트 되고 변경사항을 저장해준다.
boardModify.java
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>소셜로그인 게시판</title> </head> <body> <div id="wrap"> <h2>게시글 상세페이지</h2> <!-- 수정할 내용 입력 폼 --> <form action="updateBoard" method="post" enctype="multipart/form-data"> <table> <tr> <th>게시글 제목</th> <td><input type="text" name="board_title" value="${requestScope.boardModify.board_title}"> <input type="hidden" name="board_id" value="${requestScope.boardModify.board_id}"></td> </tr> <tr> <th>게시글 내용</th> <td><textarea rows="5" cols="50" id="board_content" name="board_content">${requestScope.boardModify.board_content}</textarea> </tr> <tr height="40"> <th>작성자 (수정불가)</th> <td><input type="hidden" name="useremail" value="${requestScope.boardModify.useremail}">${requestScope.boardModify.useremail}</td> </tr> <tr height="40"> <th>등록일 (수정불가)</th> <td><input type="hidden" name="board_regdate" value="${requestScope.boardModify.board_regdate}">${requestScope.boardModify.board_regdate}</td> </tr> <tr height="40"> <th>좋아요수</th> <td><input type="hidden" name="board_likes" value="${requestScope.boardModify.board_likes}">${requestScope.boardModify.board_likes}</td> </tr> <tr height="40"> <th>조회수</th> <td><input type="hidden" name="board_views" value="${requestScope.boardModify.board_views}">${requestScope.boardModify.board_views}</td> </tr> <tr height="40"> <th>게시글 수정일자</th> <td><input type="hidden" name="board_moddate" value="${requestScope.boardModify.board_moddate}">${requestScope.boardModify.board_moddate}</td> </tr> <tr> <td><input type="submit" value="수정"></td> </tr> </table> <div class="home-link"> <a href="boardPage">게시판 목록</a> </div> <div class="home-link"> <a href="/home">Home</a> </div> </form> <form action="deleteBoard" method="post"> <input type="hidden" name="board_id" value="${requestScope.boardModify.board_id}"> <input type="hidden" name="board_delyn" value="${requestScope.boardModify.board_delyn}"> <button type="submit">게시글 삭제하기</button> </form> </div> </body> </html>
시연동영상
3. 글 삭제
본 프로젝트는 글을 삭제 했을 때 실제로 데이터 테이블에서 글이 삭제되는 것이 아니라. board_delyn 컬럼 값이 'N'에서 'Y'로 바뀌면서 작성해두었던 query 문에 필터링되어서 select 되지 않아 UI에서 보이지 않는 것이다.
따라서 delete 메서드를 작성하는 것이 아니라 board_delyn 컬럼 값이 'N'에서 'Y'로 바꾸는 로직을 짤 것이다.
BoardController.java
간단히 board_delyn 컬럼 값이 'N'에서 'Y'로 바꾸어서 boardService에 값을 저장을 해주었다.
시연동영상
'Spring Boot' 카테고리의 다른 글
[무한댓글 게시판] 7. 댓글 수정 / 삭제 (0) 2024.02.29 [무한댓글 게시판] 6. 조회수 / 좋아요 (1) 2024.02.22 [무한댓글 게시판] 4. QueryDSL로 게시판 리스트 출력하기 (+페이지네이션) (0) 2024.02.16 [무한댓글 게시판] 3. Service 작성시 QueryDSL 사용하기 (1) 2024.02.15 [무한댓글 게시판] 2. Entity / Repository / Service + QueryDSL 사용 (0) 2024.02.15