방명록
- [Spring Boot][FastCampus][Final Project] 스프링 부트를 이용한 게시판 프로그램 ④ - 추가 점검사항2022년 08월 30일 01시 32분 37초에 업로드 된 글입니다.작성자: DandyNow728x90반응형
과제 상세 9
TITLE, WRITER, CONTENT는 빈 값이 아니여야 하고 빈 값을 입력 시 에러가 발생해야 합니다.
title, writer, content 문자열 변수에 @NotEmpty 어노테이션 처리하여 요구사항을 충족하였다.
src\main\java\com\fastcampus\board\dto\BoardDto.java
package com.fastcampus.board.dto; import java.time.LocalDateTime; import javax.validation.constraints.NotEmpty; import com.fastcampus.board.model.entity.Board; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import lombok.ToString; @Getter @Setter @ToString @AllArgsConstructor @NoArgsConstructor public class BoardDto { private long seq; @NotEmpty private String title; @NotEmpty private String writer; @NotEmpty private String content; private LocalDateTime regDate; private Long cnt; public Board toEntity(Long cnt) { Board build = Board.builder() .seq(seq) .writer(writer) .title(title) .content(content) .regDate(regDate) .cnt(cnt) .build(); return build; } @Builder public BoardDto(Long seq, String writer, String title, String content, LocalDateTime regDate, Long cnt) { this.seq = seq; this.writer = writer; this.title = title; this.content = content; this.regDate = regDate; this.cnt = cnt; } }
과제 상세 10
글을 수정할 때마다 cnt가 1씩 증가한다.
"게시물 상세 조회 코드"인 getPost() 메서드에 cnt가 1씩 증가하는 코드를 추가하였다. 즉, 게시물의 '조회'를 클릭하여 update.jsp가 렌더링 될 때마다 cnt가 1씩 증가하도록 한 것이다. 그리고 게시물을 수정하는 updatePost() 메서드를 생성하고 증가한 cnt 값을 boardDto로부터 가져와서 DB에 반영하도록 했다.
src\main\java\com\fastcampus\board\service\BoardService.java
package com.fastcampus.board.service; import java.util.ArrayList; import java.util.List; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.fastcampus.board.dto.BoardDto; import com.fastcampus.board.model.entity.Board; import com.fastcampus.board.repository.BoardRepository; @Service public class BoardService { private BoardRepository boardRepository; public BoardService(BoardRepository boardRepository) { this.boardRepository = boardRepository; } // 게시물 생성 @Transactional public Long savePost(BoardDto boardDto) { return boardRepository.save(boardDto.toEntity(0L)).getSeq(); } // 게시물 수정 @Transactional public Long updatePost(BoardDto boardDto) { Board board = boardRepository.findById(boardDto.getSeq()).get(); return boardRepository.save(boardDto.toEntity(board.getCnt())).getSeq(); } // 게시물 전체 가져오기 @Transactional public List<BoardDto> getBoardList() { Iterable<Board> boardList = boardRepository.findAll(); List<BoardDto> boardDtoList = new ArrayList<>(); for(Board board : boardList) { BoardDto boardDto = BoardDto.builder() .seq(board.getSeq()) .writer(board.getWriter()) .title(board.getTitle()) .content(board.getContent()) .regDate(board.getRegDate()) .cnt(board.getCnt()) .build(); boardDtoList.add(boardDto); } return boardDtoList; } // 게시물 삭제 @Transactional public void deletePost(Long id) { boardRepository.deleteById(id); } // 게시물 상세 조회 @Transactional public BoardDto getPost(Long id) { Board board = boardRepository.findById(id).get(); // 조회수 +1 코드 추가 ----------------- if(board.getCnt() == null) { board.setCnt(1L); } else { board.setCnt(board.getCnt()+1); } // ------------------------------------- BoardDto boardDto = BoardDto.builder() .seq(board.getSeq()) .writer(board.getWriter()) .title(board.getTitle()) .content(board.getContent()) .regDate(board.getRegDate()) .build(); return boardDto; } }
과제 상세 11
조회를 할 때마다 cnt를 1씩 증가해야 된다. SEQ는 자동으로 1씩 증가한다.
아래는 게시물에서 "수정"을 클릭하면 렌더링 되는 화면이다. Edit Save는 변경 내용을 저장하고, Cancel은 저장하지 않고 끝낸다. 즉, Edit Save는 "과제 상세 10"의 "수정 기능"에 해당하고 Cancel은 "과제 상세 11"의 "조회 기능"에 해당한다. 두 기능 모두 cnt를 1씩 증가시켜야 한다.
src\main\webapp\WEB-INF\update.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <h1>Edit Employee</h1> <form:form method="POST" action="/update"> <table > <tr> <td>PostId : </td> <td>${command.getSeq()}</td> <td><form:hidden path="seq" /></td> </tr> <tr> <td>NickName : </td> <td><form:input path="writer" value="${command.getWriter()}"/></td> </tr> <tr> <td>Title :</td> <td><form:input path="title" value="${command.getTitle()}"/></td> </tr> <tr> <td>Content :</td> <td><form:input path="content" value="${command.getContent()}"/></td> </tr> <tr> <td> </td> <td><input type="submit" value="Edit Save" /> <button type="button" onClick="location.href='/'">Cancel</button></td> <td></td> </tr> </table> </form:form>
아래 Board.java의 Long seq 변수에 적용된 @GeneratedValue 어노테이션 설정으로 SEQ가 자동 증가한다.
src\main\java\com\fastcampus\board\model\entity\Board.java
package com.fastcampus.board.model.entity; import java.time.LocalDateTime; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @Entity @Table(name = "board") public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long seq; @Column(length = 200, nullable = false) private String title; @Column(length = 20, nullable = false) private String writer; @Column(length = 2000, nullable = false) private String content; @Column(nullable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") private LocalDateTime regDate; @Column(columnDefinition = "bigint default 0") private Long cnt; @Builder public Board(Long seq, String writer, String title, String content, LocalDateTime regDate, Long cnt) { this.seq = seq; this.writer = writer; this.title = title; this.content = content; this.regDate = LocalDateTime.now(); this.cnt = cnt; } }
※ 전체 소스 코드 보기
728x90반응형'언어·프레임워크 > Spring Boot' 카테고리의 다른 글
다음글이 없습니다.이전글이 없습니다.댓글