게시판 만들기(스프링 부트3, 나도코딩 스터디)/3장. 게시판 만들고 새 글 작성하기 : Create

3.3 DTO를 데이터베이스에 저장하기(게시판 만들기 / 길벗 코딩 자율학습단)

coding232624 2023. 11. 22. 23:11

데이터베이스(DB, Database) => 데이터를 관리하는 창고 / 행과 열로 구성된 테이블에 저장해 관리

대표적인 DB 프로그램 => MySQL, 오라클, 마리아DB 등등

사용할 DB 프로그렘 => H2 DB

 

DB에서 자바 언어를 이해하게 해주는 것 => JPA(Java persistence API)

JPA의 핵심 도구 2가지

  1. 엔티티(entity) : 자바 객체를 DB가 이해할 수 있도록 만들어줌 / 이를 기반으로 테이블 작성
  2. 리파지터리(repository) : 엔티티가 DB 속 테이블에 저장 및 관리될 수 있게 하는 인터페이스

 

 

DTO를 데이터베이스에 저장하기(방법/과정)

1. DTO를 엔티티로 변환하기

  • 프로젝트 아래에 엔티티를 관리하기 위한 entity패키지 만들기
  • 새 클래서 생성(Article)
  • 이 클래스가 엔티티임을 선언하기 위해 @Entity 어노테이션 붙이기
  • 엔터티의 대푯값으로 사용할 @Id  어노테이션과 이를 자동으로 생성하기 위해 @GeneratedValue 어노테이션 추가
  • title,content 필드를 DB에서 인식할 수 있도록  @Column 추가
  • id, title, content를 포함하는 Article 생성자 추가
  • DTO가 엔티티로 잘 변환되는지 확인하기 위해 toString()메서드 추가
  • 엔티티로 변환하는DTO클래스에 toEntity() 메서드 생성 후 DTO객체를 엔티티로 반환(Article 생성자 반환)
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) {
        this.id = id;
        this.title = title;
        this.content = content;
    }

    @Override
    public String toString() {
        return "Article{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                '}';
    }

}

 

2. 리파지터리로 엔티티를 DB에 저장하기

  • 프로젝트 아래에 repository패키지 만들기
  • 새 클래스를 만들고 Interface 파일 생성(ArticleRepository)
  • 자동으로 생성된 인터페이스 뒤에 extends Crud 입력 후 JPA에서 제공하는 CrudRepository<T,ID> 선택
  • . CrudRepository뒤에 <Article, Long> 붙이기
  • => Article : 관리할 엔티티의 클래스 타입 / Long : 관리할 엔티티의 대푯값 타입

 

3.컨트롤러 수정

  • DTO를 엔티티로 변환하기 위해 form객체의 toEntity() 메서드를 호출해 Article 타입의 article에 저장
  • 리파지터리로 엔티티를 DB에 저장하기 위해 ArticleRepsitory 타입의 articlerepository 객체 선언
  • Article 타입의 saved 객체에 articleRepository.save() 메서드를 호출해 article 엔티티를 저장
  • 객체생성 없이(new) 객체를 사용하기 위해 @Autowired 어노테이션 붙이기

 

4. 확인해보기

  •