[Java 게시판 만들기]-생성 기능

김예진·2022년 10월 14일
1

java

목록 보기
1/21
post-thumbnail

홍팍님 강의를 참고하여 게시판을 만들어보았다
(Client->Server)
Client에서 폼 데이터가 전송 하면 Controller는 이 데이터를 객체에 담아 받는다.
이때 폼 데이터를 받는 객체를 DTO라고 한다.

(Server->DB)
먼저 서버와 디비는 서로 사용하는 언어가 다르다!
그래서 서버에서 디비로 데이터를 저장할 때 JPA를 이용하는데, JPA가 서버의 언어를 디비가 이해할 수 있게 해주고, 데이터 관리에 편리한 여러 기능을 제공해준다.
이 기능중 entity와 repository가 있는데..
entity는 서버의 언어를 디비가 이해할 수 있게 잘 규격화 된 데이터이다.
repository는 entity를 디비로 전달, 처리 해준다.

그래서 간단히 정리하자면 데이터를 저장할 때
1. dto형식으로 폼 데이터 받기
2. dto를 entity로 변환
3. repository로 저장

그럼 먼저 dto, entity, repository를 만들어 준다.

dto(TestForm)

package com.example.template.dto;


import com.example.template.entity.Article;
import lombok.AllArgsConstructor;
import lombok.ToString;

@AllArgsConstructor
@ToString
public class ArticleForm {

    private Long id;
    private String title;
    private String content;

    public Article toEntity() {
        return new Article(id, title, content);
    }
}

entity(Test)

package com.example.test.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.ToString;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Getter
public class Test {

    @Id
    @GeneratedValue
    private Long id;

    @Column
    private String title;

    @Column
    private String content;
}

Repository(TestRepository)

package com.example.test.Repository;

import com.example.test.entity.Test;
import org.springframework.data.repository.CrudRepository;

public interface TestRepository extends CrudRepository<Test, Long> {
}

mustache(update.mustache)

{{>layouts/header}}

<form class="container" action="/articles/create" method="post">
    <div class="mb-3">
        <label class="form-label">title</label>
        <input type="text" class="form-control" name="title">
    </div>
    <div class="mb-3">
        <label class="form-label">contents</label>
        <textarea class="form-control" rows="3" name="content"></textarea>
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
    <a href="/articles">Back</a>
</form>

{{>layouts/footer}}

controller(TestController.java)


//생성 페이지
    @GetMapping("/articles/new")
    private String newArticleForm() {
        return "articles/new";
    }
    
    //저장
    @PostMapping("/articles/create")
    public String createArticle(TestForm form) {
        log.info(form.toString());
        
        //DTO를 Entity로 변환
        Test test = form.toEntity();
        //Repository에게 Entity를 DB안에 저장하게 함
        Test saved = testRepository.save(test);

        return "redirect:/articles";

    }

0개의 댓글