v1 - 게시글 쓰기

coding S's avatar
Mar 14, 2024
v1 - 게시글 쓰기

[ save-form ]

{{> /layout/header}} <div class="container p-5"> <!-- 요청을 하면 localhost:8080/board/save POST로 요청됨 title=사용자입력값&content=사용자값 --> <div class="card"> <div class="card-header"><b>글쓰기 화면입니다</b></div> <div class="card-body"> <form action="/board/save" method="post"> <div class="mb-3"> <input type="text" class="form-control" placeholder="Enter username" name="username"> </div> <div class="mb-3"> <input type="text" class="form-control" placeholder="Enter title" name="title"> </div> <div class="mb-3"> <textarea class="form-control" rows="5" name="content"></textarea> </div> <button class="btn btn-primary form-control">글쓰기완료</button> </form> </div> </div> </div> {{> /layout/footer}}
글쓰기에 username을 추가해줬다. name과 일치해야 데이터가 들어감 (이거 필기함) 아무튼 controller 즉, action에 걸린 컨트롤러로 간다.
 

 
notion image
레파지토리 구조 변경
 

[ BoardController ]

@PostMapping("/board/save") public String save(String username, String title, String content) { System.out.println("username : " + username); System.out.println("title : " + title); System.out.println("content : " + content); return "redirect:/"; }
💡
DTO 없이 할 거다.

[ 컨트롤러의 책임을 다하기 위해 출력!!! 출력을 꼮! ]

💡
값을 제대로 받는지, 받지 않는지 무조건 출력을 !
notion image
💡
값을 잘 받는다. 그러면 컨트롤러의 책임을 다 한 것!! → 이제 DB차례 ! 확인했으면 sout 코드 지우면 된다! → 이것 때문에 오류가 나기도 함
 

모델링 하기 → DB에 있는 세상을 자바 세상으로 모델링 한다

[ Board ]

@Data @Table(name = "board_tb") @Entity public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String title; private String content; private String username; private Timestamp createdAt; public void update(String title, String content) { this.title = title; this.content = content; } }
💡
@Setter는 필요한 것에만 붙여준다!

[ Setter는 의미 있는 Setter를 만들어야 한다! ]

notion image
💡
이런게 바로 의미 있는 Setter. title과 content 외에는 절대 값을 바꿀 수 없다. 보통 Setter는 이런 식으로 만든다!
컨트롤러에서 Board board = new Board(); board.update("안녕", "ㅎㅎ"); 이런식으로 Board에 있는 update에 접근해서 값을 바꿔야한다!
 
💡
자동 파싱해 줄 때, 빈 생성자를 때리기 때문에 Board에는 @AllArgsConstructor~ 있으면 에러가 난다.
💡
리플렉션은 Setter 없어도 private 필드에 직접 접근하여 값을 넣을 수 있다. 즉, 애네들은 리플렉션이기 때문에 Setter가 없어도 값을 때려 넣을 수 있는 것
 

[ 테이블 만들어졌는지 확인 ]

notion image
💡
yml 설정이 안되어있으니 테이블이 만들어지지 않았다! → yml 설정하기
 

[ 테이블 생성했으니 Repository ]

notion image
💡
BoardNativeRepository를 만들어준다. 추후 삭제할 것 !
@RequiredArgsConstructor @Repository public class BoardNativeRepository { private final EntityManager em; @Transactional public void save(String title, String content, String username) { Query query = em.createNativeQuery("insert into board_tb (title, content, username, created_at) values (?, ?, ?, now())"); query.setParameter(1, title); query.setParameter(2, content); query.setParameter(3, username); query.executeUpdate(); } }
 

BoardController

public class BoardController { private final BoardNativeRepository boardNativeRepository; @PostMapping("/board/save") public String save(String title, String content, String username) { boardNativeRepository.save(title, content, username); return "redirect:/"; }
notion image
💡
h2 에서 확인!
 

더미 만들기

insert into board_tb (title, content, username, created_at) values ('제목1', '내용1', 'ssar', now()); insert into board_tb (title, content, username, created_at) values ('제목2', '내용2', 'cos', now()); insert into board_tb (title, content, username, created_at) values ('제목3', '내용3', 'love', now()); insert into board_tb (title, content, username, created_at) values ('제목4', '내용4', 'juho', now());
notion image
💡
항상 확인 제발~!
 

 

기능 하나 만들었으니 commit push 하기!

Share article

codingb