#4-Boardテーブル、Viewコントローラ
4428 ワード
📋オーダー
📌方向を整理する
位置決めはBoardテーブルの論理を整理し、デフォルト設定はUserテーブルの論理と同じです.
📌コード#コード#
@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はなく、掲示板の基本プロパティ(タイトル、内容、クリック率、コメント、作成者、作成時間、修正時間)をコラムとして指定して生成します.JPA監査による自動生成時間/修正時間
import org.springframework.data.jpa.repository.JpaRepository;
public interface BoardRepository extends JpaRepository<Board, Long> {
}
JPA Repositoryが継承するRepositoryを作成します.@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に指定します.
@Builder
@Getter
@AllArgsConstructor
public class BoardEditDto {
private Long id;
private String title;
private String content;
}
投稿に必要なタイトルと内容を変更する必要がないため、このフィールドのみを含むクラスを作成します.@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に保存します.
@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はサービスロジックに渡されます.デフォルトの設定と説明はユーザーコードの説明と同じなので、ほとんどの設定はスキップされました.
コードをできるだけ早く整理し、機能を個別に整理します.
Reference
この問題について(#4-Boardテーブル、Viewコントローラ), 我々は、より多くの情報をここで見つけました https://velog.io/@perpose12/4-회원가입-로그인-Serviceテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol