받아온 데이터를 데이터베이스에 저장하기
Database : 데이터를 관리하는 창고 (여기서는 H2 Database 사용)
JPA : Java 언어를 DB가 이해할 수 있게 해주고, 데이터 관리에 편리한 여러 기능들까지 제공함
1) DTO를 변환 (Entity로 바꿔야 함)
: toEntity() 메소드(DTO form에서 Entity 객체로 변환하는 메소드) 호출하여 Entity를 반환
1-1) Entity 작성
@Entity : DB가 해당 객체를 인식 가능
@Column : DB에서 관리하는 테이블이라는 단위에 연결할 수 있도록 만들어줌
@Id : 대표값을 지정 (like a 주민등록번호, private Long id;)
@GeneratedValue : 자동 생성 어노테이션 (1, 2, 3, ...)
[com.example.firstproject.entity - Article.java]
package com.example.firstproject.entity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
@Entity
public class Article {
@Id
@GeneratedValue
private Long id;
@Column
private String title;
@Column
private String content;
public Article(Long id, String title, String content) { // 생성자 추가
super();
this.id = id;
this.title = title;
this.content = content;
}
@Override
public String toString() {
return "Article [id=" + id + ", title=" + title + ", content=" + content + "]";
}
}
1-2) 변환 메소드 추가(toEntity() 메소드)
: Entity인 Article 객체를 반환 -> return new Article (null, title, content);
[com.example.firstproject.dto - ArticleForm.java]
package com.example.firstproject.dto;
import com.example.firstproject.entity.Article;
public class ArticleForm {
private String title;
private String content;
// 생성자 추가
public ArticleForm(String title, String content) {
this.title = title;
this.content = content;
}
@Override
public String toString() {
return "ArticleForm [title=" + title + ", content=" + content + "]";
}
public Article toEntity() {
// Entity 클리스의 객체 생성 -> 생성자 호출
return new Article(null, title, content); // 새롭게 Article을 만들어서 return
}
}
2) Repository에게 Entity를 DB안에 저장하게 함
2-1) Repository 작성
CrudRepository가 제공하고 있는 기능들을 추가코드 구현 없이 사용 가능
-> CrudRepository<관리대상 Entity, 대표값의 type>
@Autowired : 스프링 부트가 미리 생성해놓은 객체를 가져다가 자동 연결
[com.example.firstproject.repository - ArticleRepository.java]
package com.example.firstproject.repository;
import org.springframework.data.repository.CrudRepository;
import com.example.firstproject.entity.Article;
public interface ArticleRepository extends CrudRepository<Article, Long> {
}
[com.example.firstproject.controller - ArticleController.java]
package com.example.firstproject.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import com.example.firstproject.dto.ArticleForm;
import com.example.firstproject.entity.Article;
import com.example.firstproject.repository.ArticleRepository;
@Controller
public class ArticleController {
@Autowired
private ArticleRepository articleRepository;
@GetMapping("/articles/new")
public String newArticleForm() {
return "articles/new";
}
@PostMapping("/articles/create") // POST 방식으로 전송
public String createArticle(ArticleForm form) {
System.out.println(form.toString());
// 1. DTO를 변환! Entity!
Article article = form.toEntity();
System.out.println(article.toString());
// 2. Repository에게 Entity를 DB 안에 저장하게 함!
Article saved = articleRepository.save(article);
System.out.println(saved.toString());
return "";
}
}
Input
Output
1) DTO로 담겨짐
2) Entity로 변환됨
3) saved라는 변수에 반환 (id 자동생성)
이 게시물은 홍팍님의 인프런 강의를 보고 정리한 게시물 입니다.