Spring/Spirng_CRUD(MVC_Patterns)

Basic_MVC3

whyWhale 2020. 11. 26.

environment-> intelij(Ultimate)+springInitialize+templateEngine(Mustache)
fronted : bootstrap

 

GIT-HUB      github.com/KBY-TECH/SpringBasic_MVC2
#SpringBasic_MVC3

 

 

기능 구현 :

{ User class 와 Board class 중복 필드 제거 후  one to many,

상세페이지,

수정,

삭제 }

 

User class 와 Board class 중복 필드 제거 후  one to many

게시판 부분과 회원가입 부분의 각 class 에는 해당 username 이라는 필드명이 겹치게 된다.

회원가입 시 필요한 username.

게시판 작성 시 로그인이 필요하고 작성자는 username.

 이 두 필드명이 중복이 되는 경우이다.

그래서 board 클래스(테이블)와 user클래스(테이블)을 연결(관계를 맺어 생성)하려 한다.

user 와 board 간의 테이블 관계를 설정하자면! (추후 게시판 작성자에 대한 질문자들도 고려해야 하는 상황)

한 유저가 여러개의 글을 작성 할 수 있어야 하므로!   쉽게 1:N 관계 인 것을 알수 있다.

(DataBase 학습에서 1:N 관계인 것에 N인 부분에 1에 해당하는 테이블의 PK값을 주는 규칙)

그러므로 board에 username 을 지우고 난후 

 

@ManyToOne   ->  {  다수는 board(many) -> User(one)  } 
@JoinColumn(foreignKey = @ForeignKey(name="fk_board_username"
))// 조인할떄 쓰이는 Column이라는 애노테이션 && foreignKey name도 설정 "fk_board_username")
private User username;// User 라는 객체 자체를 가져온 것이다.

 

생성자의 인자 또한 바꾸어 준다. 그리고 난 후 index.html 페이지의 값에 username이라는 머스테치 문법의 수정을 필요로 한다.

 

추가적으로 해당 게시판을 작성후 생성 날짜가 있어야 하므로! board class 에 private String createDate; 라는 필드멤버를 추가 후 자바에 있는 기능중에 LocalDateTime 을 이용한다.

this.createDate=LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); //생성자 작성

(사용법은 Java 공식 Document에 나와있다.)

 

 

상세페이지

 

Flow

상세페이지를 보기 위해선 해당 게시판의 id 값을 가지고  JPA를 이용해 해당 게시판의 board 객체의 {작성자, 제목, 내용} 가져와야 한다.

 

먼저 해당 게시판을 보기 위해 로그인된 세션인지를 확인 한다.(이전의 세션 객체를 따로 만들어 두었다.)

id 값을 조회한 후 해당 동적 페이지(board/board_detail)에 {{board}} 로 뿌려준다.

 

 

 

 

 

 

수정

 

Flow

-상세페이지 화면에서 수정 화면으로 넘어갈 수 있도록 하는 것과 메인 페이지(board게시판)에 수정을 할 수 있도록 기   능구현을 하였다. 

-이번에도 수정을 하기 위해 해당 id값과 세션을 확인한다.세션에 대한 것을 확인 함으로써 수정가능한 대상과 동일 사용자와 동일한 사용자 인지 구분하기 위해서 이다.

-해당 사용자의 form method는 put 으로 진행하였다. Post는 새로운 객체가 추가 되는 것이지만 put은 추가되지 않고 변경되는 부분이기 때문이다.

- 또한 board class 에 update 라는 메소드를 구현하여 해당 title과 contents를 변경한다. 그리고 해당 JPA 를 상속받은 Repoistory에 대한 변경이 이루어졌음을 반영하기 위해 save를 해준다. 

-마지막의 return 값은 이전 형태와 다르게 되어 있다. 해당 id의 값을 넣어주어 detail page로 이동하기 위함이다.(return 값은 String 이여야 한다)

#String.format 사용법.

 

삭제

 

-이번 삭제는 Ajax 처리가 아닌 일반적인 삭제 구현 기능이다.

- 삭제는 JPA에서 사용하는 delete 메소드를 활용하여 간단히 제거하였다.

- 해당 delete 에는 변수 id 값만이 넣는 것이 아닌 인스턴스 자체를 삭제해 줘야 하므로 인스턴스를 가져와야한다. 그러므로 먼저 id 값을 조회하여 해당 인스턴스를 가져오고 delete안에 넣어주면 해당 인스턴스는 삭제가 된다.

 

 

BoardController

해당 동적 페이지를 보게되면 form 테그를 넣어주고 value 가 put아닌 Delete를 사용하였다. 바로위의 매핑형식도 보면 put이 아닌 DeleteMapping 으로 되어있음을 확인할 수 있다.

 

Template

※  댓글 기능 설계 단계. (구현은 하지 않음.)  -> 추후 예정.

 

    one to many -> 작성자와 댓글 ->  1:N(추가와 삭제 기능은 Ajax 처리 예정)

 

 

 

 

 

※기본적인 CRUD 를 보면 먼저 Create를 통해 table의 로우를 생성해주고 해당 인스턴스를 확인 하기 위해 Pk 의 값을 주로 사용하여 조회 밑 삭제, 수정이 일어나는 것을 알수 있다.

 

 

 

'Spring > Spirng_CRUD(MVC_Patterns)' 카테고리의 다른 글

Basic_MVC6(Ajax)  (0) 2020.12.09
Basic_MVC5  (0) 2020.12.01
Basic_MVC4  (0) 2020.11.30
Basic_MVC2  (0) 2020.11.19
Basic_MVC  (0) 2020.11.12

댓글