[Spring Boot] 데이터 CRUD(게시판) - 데이터 생성하기 with JSP(08)

Bokyoung Kim·2023년 1월 8일
0

받아온 데이터를 데이터베이스에 저장하기

Database : 데이터를 관리하는 창고 (여기서는 H2 Database 사용)

JPA : Java 언어를 DB가 이해할 수 있게 해주고, 데이터 관리에 편리한 여러 기능들까지 제공함


Entity와 Repository

  • Entity : 자바 객체를 DB가 이해할 수 있게 잘 규격화된 데이터이며, Repository라는 일꾼을 통해서 DB에게 전달되고 처리됨 -> DB 속 테이블에 관리됨


<DTO를 Entity로 변환하고 Repository를 통해서 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 자동생성)



이 게시물은 홍팍님의 인프런 강의를 보고 정리한 게시물 입니다.

출처 : https://www.inflearn.com/course/%EA%B0%9C%EB%85%90%EC%8B%A4%EC%8A%B5-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%9E%85%EB%AC%B8/dashboard

0개의 댓글