생성일, 수정일, 활성화 여부에 맞는 DB 테이블에 컬럼을 추가해줍니다.

package toyproject.springmvcboard.domain.board;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.mapstruct.Mapper;
import java.time.LocalDateTime;
@Entity
@Getter
@NoArgsConstructor
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String title;
private String content;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
private int enabled;
@Builder
public Board(long id, String title, String content, LocalDateTime createdAt, LocalDateTime updatedAt, int enabled) {
this.id = id;
this.title = title;
this.content = content;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
this.enabled = enabled;
}
@Mapper(componentModel = "spring")
public static interface BoardMapper {
BoardDTO boardToBoardDTO(Board board);
Board boardDTOToBoard(BoardDTO boardDTO);
}
}
package toyproject.springmvcboard.domain.board;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
@NoArgsConstructor
public class BoardDTO {
private long id;
@NotNull
@NotBlank
private String title;
@NotNull
@NotBlank
private String content;
@NotNull
private LocalDateTime createdAt;
@NotNull
private LocalDateTime updatedAt;
@NotNull
private int enabled;
@Builder
public BoardDTO(long id, String title, String content, LocalDateTime createdAt, LocalDateTime updatedAt, int enabled) {
this.id = id;
this.title = title;
this.content = content;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
this.enabled = enabled;
}
}
package toyproject.springmvcboard.domain.board;
import org.springframework.stereotype.Component;
import javax.annotation.processing.Generated;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-12-04T17:45:47+0900",
comments = "version: 1.5.5.Final, compiler: javac, environment: Java 17.0.5 (Azul Systems, Inc.)"
)
@Component
public class BoardMapperImpl implements BoardMapper {
@Override
public BoardDTO boardToBoardDTO(Board board) {
if (board == null) {
return null;
}
BoardDTO.BoardDTOBuilder boardDTO = BoardDTO.builder();
boardDTO.id(board.getId());
boardDTO.title(board.getTitle());
boardDTO.content(board.getContent());
boardDTO.createdAt(board.getCreatedAt());
boardDTO.updatedAt(board.getUpdatedAt());
boardDTO.enabled(board.getEnabled());
return boardDTO.build();
}
@Override
public Board boardDTOToBoard(BoardDTO boardDTO) {
if (boardDTO == null) {
return null;
}
Board.BoardBuilder board = Board.builder();
board.id(boardDTO.getId());
board.title(boardDTO.getTitle());
board.content(boardDTO.getContent());
board.createdAt(boardDTO.getCreatedAt());
board.updatedAt(boardDTO.getUpdatedAt());
board.enabled(boardDTO.getEnabled());
return board.build();
}
}
현재 코드에서는 새로운 게시글을 작성할 경우 createdAt와 updatedAt에 null값이 들어가서 오류가 발생하게 됩니다. 이를 해결하기 위해서 게시글 작성 시 현재 시간이 입력되게 해줍니다.
package toyproject.springmvcboard.domain.board;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.time.LocalDateTime;
@Getter
@Setter
@NoArgsConstructor
public class BoardDTO {
private long id;
@NotNull
@NotBlank
private String title;
@NotNull
@NotBlank
private String content;
@NotNull
private LocalDateTime createdAt = LocalDateTime.now();
@NotNull
private LocalDateTime updatedAt = LocalDateTime.now();
@NotNull
private int enabled = 1;
@Builder
public BoardDTO(long id, String title, String content, LocalDateTime createdAt, LocalDateTime updatedAt, int enabled) {
this.id = id;
this.title = title;
this.content = content;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
this.enabled = enabled;
}
}

작성일을 년, 월, 일, 시간, 분으로 표시하기 위해 format 표현식을 사용해줍니다.
<span margin style="float: right" th:text="${#temporals.format(boardDTO.getCreatedAt(), 'yyyy-MM-dd HH:mm')}">작성일</span>
게시글 페이지에 게시글 목록으로 돌아가는 버튼을 추가하고 내용이 표시 되는 칸을 늘려줍니다.
<div class="bg-body-tertiary rounded-3" style="height: 650px">
<h3 th:text="${boardDTO.getTitle()}">제목</h3>
<span margin style="float: right" th:text="${#temporals.format(boardDTO.getCreatedAt(), 'yyyy-MM-dd HH:mm')}">작성일</span>
</br>
<span>작성자</span>
<span style="float: right">조회수</span>
<span style="float: right">추천수</span>
<span style="float: right">댓글</span>
<hr>
<span th:text="${boardDTO.getContent()}"></span>
</div>
<div class="text-end" style="margin-top: 15px">
<a class="btn btn-outline-primary" th:href="@{/board/list}" type="button">목록</a>
</div>
