게시판 무작정 따라하기 - 글 작성 처리

기록하는 용도·2022년 5월 18일
0

게시글 작성 폼을 생성하고, 글을 작성시 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를 이용해서 게시글을 작성 할 수 있다.

0개의 댓글