#4-Boardテーブル、Viewコントローラ


📋オーダー

  • Board.java
  • BoardRepository.java
  • BoardSaveDto.java
  • BoardEditDto.java
  • BoardPostingService.java
  • BoardPostingController.java
  • 📌方向を整理する


    位置決めはBoardテーブルの論理を整理し、デフォルト設定はUserテーブルの論理と同じです.

    📌コード#コード#

  • Board.java
  • @Getter
    @Entity(name = "board")
    @Builder
    @AllArgsConstructor
    @NoArgsConstructor
    @EntityListeners(AuditingEntityListener.class)
    public class Board {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "BOARD_ID")
        private Long id;
    
        @Column(nullable = false, length = 100)
        private String title;
    
        @Lob
        private String content;
    
        private int count;
    
        @OneToMany(mappedBy = "board")
        private List<Reply> replies;
    
        @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumn(name = "USER_ID")
        private User user;
    
        @Column(nullable = false)
        private String auth;
    
        @CreatedDate
        private LocalDateTime createdDate;
    
        @LastModifiedDate
        private LocalDateTime modifiedDate;
    
        public void setCount(int count){this.count = count;}
        public void setAuth(User user){this.auth = user.getNickname();}
        public void editTitle(String title){this.title = title;}
        public void editContent(String content){this.content = content;}
    }
    同様に、Setterはなく、掲示板の基本プロパティ(タイトル、内容、クリック率、コメント、作成者、作成時間、修正時間)をコラムとして指定して生成します.
  • @CreatedDate, @LastModifiedDate
    JPA監査による自動生成時間/修正時間
  • BoardRepository.java
  • import org.springframework.data.jpa.repository.JpaRepository;
    
    public interface BoardRepository extends JpaRepository<Board, Long> {
    }
    
    JPA Repositoryが継承するRepositoryを作成します.
  • BoardSaveDto.java
  • @Builder
    @Getter
    @AllArgsConstructor
    public class BoardSaveDto {
        @NotNull
        private String title;
    
        @NotNull
        private String content;
    
        private Integer count;
    
        private User user;
    
        public Board toEntity(User user) {
            return Board.builder()
                    .title(title)
                    .content(content)
                    .count(0)
                    .user(user).build();
        }
    }
    投稿の作成に必要なタイトル、コンテンツ、およびユーザー情報のみを受信するクラスを作成します.
    Builderでデフォルトcount(クエリー数)を0に指定します.
  • BoardEditDto.java
  • @Builder
    @Getter
    @AllArgsConstructor
    public class BoardEditDto {
        private Long id;
        private String title;
        private String content;
    }
    投稿に必要なタイトルと内容を変更する必要がないため、このフィールドのみを含むクラスを作成します.
  • BoardPostingService.java
  • @Service
    @RequiredArgsConstructor
    public class BoardPostingService {
    
        private final BoardRepository boardRepository;
        private final UserRepository userRepository;
    
        @Transactional
        public void save(BoardSaveDto boardSaveDto, String nickname) {
            User findUser = userRepository.findByNickname(nickname).orElse(null);
            Board board = boardSaveDto.toEntity(findUser);
            board.setAuth(findUser);
            boardRepository.save(board);
        }
    }
    BoardSaveDto形式を投稿としてサービスを作成し、セッションメンバーのニックネームを受信して処理するサービスロジック.
    ニックネームでユーザー情報を検索し、Boardクラスを作成してMySQLに保存します.
  • BoardPostingController.java
  • @Controller
    @RequestMapping("/board")
    @RequiredArgsConstructor
    public class BoardPostingController {
    
        private final BoardPostingService boardPostingService;
    
        @GetMapping("/notice/write")
        public String noticePosting(BoardSaveDto boardSaveDto) {
            return "/board/notice_posting";
        }
    
        @PostMapping("/notice/write")
        public String noticePosting(BoardSaveDto boardSaveDto, HttpSession session) {
            boardPostingService.save(boardSaveDto, session.getAttribute("loginUser").toString());
            return "redirect:/board/notice";
        }
    }
    Postを介してアクセスすると、BoardSaveDtoとSessionはサービスロジックに渡されます.
    デフォルトの設定と説明はユーザーコードの説明と同じなので、ほとんどの設定はスキップされました.
    コードをできるだけ早く整理し、機能を個別に整理します.