게시글 작성 폼을 생성하고, 글을 작성시 db에 저장되도록 해본다.
데이터가 넘어오는걸 확인하기 위해
<form action="board/writepro" method="post">
여기에서의 "board/writepro" 부분과
@PostMapping("/board/writepro")
controller에서 ("/board/writepro")가 일치해야한다.
제목과 내용을 입력하고 작성 버튼을 누르면 /board/writepro 주소로 넘어간다.
이런식으로 제목과 내용이 넘어간것을 볼 수 있다.
여기까지 확인후에,
실제로 작성한 것을 db에 저장해야한다.
db에 저장하기 위해서는 repository가 필요하다.
repository와 entity 패키지를 만들어 주었다.
그리고 entity 패키지 내에 Board(테이블명과 일치하는것이 좋음)클래스를 생성하였다.
이 형식에 맞게 Board클래스 내에 적어주었다.
@Entity //테이블을 의미하는 어노테이션
public class Board {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String title;
private String content;
}
여기서, controller로 돌아가보면
@PostMapping("/board/writepro")
public String boardWritePro(String title, String content) {
System.out.println("제목 :" + title);
System.out.println("내용 :" + content);
return "";
}
title과 content를 어떻게 넘기냐하면 이전에 html 파일을 살펴보면
<div class="layout">
<form action="/board/writepro" method="post">
<input name="title" type="text">
<textarea name="content"></textarea>
<button type="submit">작성</button>
<!-- 이 버튼의 역할은 데이터를 전송하는 역할을 한다. type=submit-->
<!-- 이 버튼을 누를시 폼안에 있는 input과 textarea가 board/writedo로 넘어가게된다.-->
</form>
</div>
name에 content,title을 넣어주었다. 이때 매개변수로 담아서 이곳에 들어가게된다.
boardWritePro(String title, String content)
하지만 많아지다보면 받아주기가 힘들어지는데 entity형식 그대로 받아들일 수 있기때문에 이렇게 작성이 가능하다.
이때 board클래스에서
@Data
어노테이션을 통해서
@PostMapping("/board/writepro")
public String boardWritePro(Board board) {
System.out.println(board.getTitle());
return "";
}
이런식의 코드 작성을 통해서 데이터가 넘어오는 것을 확인 가능하다.
재실행시
를 통해 정상 진행됨을 확인 할 수 있다.
이제 repository패키지안에 BoardRepository 인터페이스를 만들고, 역시 repository 어노테이션을 작성해준다.
<테이블,id의 type>
service패키지를 생성하고 그 안에 BoardService클래스를 생성한다.
마찬가지로 service 어노테이션을 추가한다.
private BoardRepository boardRepository;
private BoardRepository boardRepository=new;..
두번째줄처럼 객체 생성하는것이 일반적이지만, 인터페이스이기때문에 객체를 생성할 수 없다.
이때 Autowired라는 어노테이션을 통해서 알아서 읽어와서
private BoardRepository boardRepository; 이 줄에 주입할 수 있도록 한다.
(의존성 주입(dependency injection))
@Service
public class BoardService {
@Autowired
private BoardRepository boardRepository;
public void write(Board board){
boardRepository.save(board);
}
이렇게 서비스 클래스를 완성 할 수 있는데, 컨트롤러에서 사용이 가능하다.
@PostMapping("/board/writepro")
public String boardWritePro(Board board) {
boardService.write(board);
return "";
}
}
이처럼 postmapping으로 넘어왔을때 데이터가 (Board board) 이쪽으로 들어오기때문에
boardService.write(board); 이렇게 쓸 수 있는것이다.
컨트롤러 입장해서 boardservice를 모르기때문에 여기서도 주입을 시켜준다.
**@Autowired
private BoardService boardService;**
@GetMapping ("/board/write")//어떤 url로 접근할 것인지에 대한 어노테이션 -> localhost:8080/board/write
public String boardWriteForm(){
return "boardwrite";
}
@PostMapping("/board/writepro")
public String boardWritePro(Board board) {
boardService.write(board);
return "";
}
서버 재실행시 제목과 내용을 입력하고 엔터 혹은 전송 버튼을 누르면 빈화면이 뜨는것은 뷰가 없기때문이고, 인텔리제이에서 타임리프 오류가 뜰 것이다.
새로고침 버튼을 누르면 정상적으로 들어간걸 볼 수 있다.
간단하게 jpa를 이용해서 게시글을 작성 할 수 있다.