[ Spring Boot ] 데이터 생성 With JPA

ma.caron_g·2022년 9월 5일
0

스프링 부트

목록 보기
6/9
post-thumbnail

본 글은 Youtube - 홍팍님의 강의를 참고하여 작성하였습니다.

[ JPA란? ]

데이터베이스에 데이터를 저장하기 위해서는 SQL문 즉, 쿼리문을 사용해야한다.
따라서 자바 언어만으로는 데이터베이스에 접근하기 어렵다.

이를 해결하기 위한 방법이
SpringBoot 프로젝트를 처음 만들 때 dependecies에 추가하였던

JPA를 사용해줄 것이다.

[ JPA 핵심 도구 ]

  • Entity
    자바 객체를 DB가 이해할 수 있도록 규격화 된 데이터
    규격화된 Entity는 Repository라는 일꾼을 통해서 DB에게 전달되어 처리됩니다.

  • Repository

DTO - Entity - Repository - DB에 저장하는 과정을 살펴보겠습니다.

[ ArticleController.java ]

Entity를 사용하기 위한 코드를 추가해주겠습니다.

 // 1. DTO를 변환! Entity!
        Article article = form.toEntity();
        System.out.println(article.toString());

Article이라는 클래스가 없어 오류가 날 것입니다.
Article을 생성해주겠습니다.

오류난 Article에 마우스를 대고 Create class 'Article' 을 클릭해줍니다.

프로젝트에 📁 entity라는 폴더를 생성하여 만들겠습니다.
Destination package:에 기존 폴더를 지우고 entity를 적어 자동 생성하여 그 안에 Article 클래스를 만들어줍니다.

위와 같이 entity 폴더 안에 Article.java가 만들어졌습니다.

이제 컨트롤러에 .toEntity를 해결해주겠습니다.

[ Article.java ]

아래 코드를 작성해줍니다.

package com.example.firstproject.entity;

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

@Entity // DB가 해당 객체를 인식 가능
public class Article {

    @Id // 대표값을 지정! like a 주민등록번호 (식별번호)
    @GeneratedValue // 1, 2, 3, ... 자동 생성 어노테이션!
    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 + '\'' +
                '}';
    }

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

우선 이 클래스가 Entity임을 알려주기 위해
@Entity를 클래스 위에 명시해줍니다.

컬럼 종류인 제목(title), 내용(content)를 선언해주고 생성자와, toString()메서드를 Generate 하여줍니다.

그 후, 각 변수에 컬럼임을 알려주기 위한 @Column을 붙여 필드 값임을 알립니다.

여기서 한 가지를 추가하여
데이터에서는 식별하기 위해 중복되지 않는 값을 붙이는데
id 값을 추가 선언합니다.

id는 서로 중복되지 않음을 알리기위해 @id를 붙여주고
자동으로 값이 생성될 수 있도록 @GeneratedValue를 붙여줍니다.

.toEntity()를 해결하기 위해 toEntity()메서드를 만들어
Article 타입을 반환합니다.

그 후 return 값으로는 새로운 Article을 반환하기 때문에 앞에 new를 붙여줍니다.
매개변수로 (id값은 null, title, content)를 반환해줄 것입니다.

이제 이 Entity를 다룰 Repository를 만들어봅시다.

[ ArticleController.java ]

코드를 다시 추가해줍니다.

@Autowired // 스프링 부트가 미리 생성해 놓은 객체를 가져다가 자동 연결!
ArticleRepository articleRepository
...
// 2. Repository에게 Entity를 DB안에 저장하게 함!
        Article saved = articleRepository.save(article);
        System.out.println(saved.toString());

따로 객체를 생성해주지 않아도 @Autowired 어노테이션을 통해 자동으로 연결해줍니다.

articleRepositorysave()에도 오류가 나는데 이 또한 정의해주어야한다.

ArticleRepository 인터페이스를 생성합니다.

[ ArticleRepository.java ]

package com.example.firstproject.repository;

import com.example.firstproject.entity.Article;
import org.springframework.data.repository.CrudRepository;

public interface ArticleRepository extends CrudRepository<Article, Long> {

}

ArticleRepository에 Crud를 담당하는 Repository CrudRepositoryextends 해주고 <> 꺽쇠에 두 가지 값을 넣어줍니다.
첫 번째에는 어떤 값을 다룰지에 대한 클래스를, 두 번째는 id값의 타입을 넣어줍니다.

CrudRepositorysave를 제외한 여러가지 메서드가 존재하는데 궁금하면
Command를 누르고 클릭하면 확인할 수 있다.

[ ArticleController.java ]

오류가 없어진 것을 볼 수 있다 (오류가 날 시 import 해주세요)

save() 안에는 Article을 객체로 만들었던 article을 넣어줍니다.

이제 출력문으로 saved객체의 값을 출력해주면

id값이 자동으로 생성되면서 입력값을 데이터베이스에 저장되게 됩니다.

profile
다른 사람이 만든 것을 소비하는 활동보다, 내가 생산적인 활동을 하는 시간이 더 많도록 생활화 하자.

0개의 댓글