본문 바로가기

⭐ SpringBoot/𝄜 게시판 with SpringBoot

7. 데이터 생성 with JPA

728x90
반응형

자바 언어를 DB가 이해하게 도와주는 라이브러리가 JPA이다.

JPA의 핵심 도구로는 Entity와 Repository가 있다.

dto → Controller → Entity -------------JPA (Repository)---------------→ DB (Table)

 

form 데이터를 DB로 저장하기 위한 과정

1. Dto를 Entity로 변환해야 한다.

2. Repository에게 Entity를 DB안에 저장하게 한다.

 

엔티티로 변환

ArticleController에서 아래의 코드를 추가하고, Article 클래스가 현재 생성된것이 없으므로, control + 클릭으로 신규로 생성을 해준다.

기본 패키지 폴더에 entity라는 폴더를 생성하고, entity 폴더에 Article 자바 파일을 생성한다.

    @PostMapping("/articles/create")
    public String createArticle(ArticleForm form) {
        System.out.println(form.toString());
        Article article = form.toEntity();
        return "/articles/new";
    }

entity 폴더에 > Article 자바 파일에 아래의 코드를 추가한다.

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 {

    // 기본적으로 Entity에는 대표값을 넣어줘야 한다.

    @Id // 사람으로 치면 주민등록 번호 같은 개념이다.
    @GeneratedValue // 값들의 순서를 정해주는 pk같은 개념으로 이해하면 쉽다. 1,2,3,4,5
    private Long id;

    @Column // DB에서 이해할수 있도록 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 + '\'' +
                '}';
    }
}

변환 메소드 추가

form.toEntity(); 가 아직 정의 되지 않은 상태이다. 구현을 해준다.

해당 문구에 마우스를 올리면 자동으로 생성을 도와주는 문구가 나타난다 여기서 생성을 클릭한다.

ArticleForm 자바 클래스 파일안에 toEntity라는 메소드로 생성이 된다.

public Article toEntity() {
        return new Article(null, title, content); //toEntity타입은 Article을 반환하기를 원하기 때문에 새롭게 Article을 만들어서 리턴을 해준다.
        // Article이 Entity 클래스 였으므로,
        // Entity 클래스의 객체를 생성해야 하기 때문에 생성자를 호출해야 한다.
        // 해당 생성자는 id, title, content를 입력받고 있기 때문에 이것에 맞게 작성을 해야한다.
    }

데이터 저장하기

<ArticleController 파일에서>

        Article saved = articleRepository.save(); // articleRepository가 save라는 메소드를 호출할 것인데
        // 위에서 생성한 article을 save 하게 할 것이다. 그리고 save 된 데이터를 최종적으로 반환하게 한다.
        // Article saved 라는 타입으로 반환한다.

articleRepository 를 사용하기 위해 필드에 아래와 같이 선언을 해준다.

    private ArticleRepository articleRepository;

Repository 작성

기본 패키지 폴더 아래에 repository 패키지를 생성한다.

그리그 그 패키지 폴더 안에 ArticleRepository라는 인터페이스를 하나 생성한다.

ArticleRepository 인터페이스 코드는 아래와 같다.

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는 CrudRepository가 가지고 있는 서비스를 정의 없이 바로 사용이 가능하다.
    //CrudRepository는 2개의 값이 필요하다. 관리대상엔티티, 관라대상 엔티티에서 정한 대표 타입을 지정 id 타입이 Long 이었기 때문에 Long을 지정

}

객체 주입하기

<ArticleController 파일에서>

추가로 @Autowired 를 추가하면 어딘가에 생성된 객체를 자동으로 연결 해준다.

    @Autowired // 스프링 부트가 미리 생성해 높은 객체를 가져다가 자동 연결!
    private ArticleRepository articleRepository;

그리고 아래와 같이 Article saved = articleRepository.save(); 코드에서 save( ) 값 안에 form에서 받은 article에서 받은 변수 값을 넣어준다.

Article saved = articleRepository.save(article);

데이터가 정상적으로 변환되는지 체크 하기

ArticleController에 System.out.println()을 활용하여 데이터를 찍어보기

        //1. Dto를 Entity로 변환해야 한다.
        Article article = form.toEntity();

        System.out.println(form.toString());

        //2. Repository에게 Entity를 DB안에 저장하게 한다.
        Article saved = articleRepository.save(article); // articleRepository가 save라는 메소드를 호출할 것인데
        // 위에서 생성한 article을 save 하게 할 것이다. 그리고 save 된 데이터를 최종적으로 반환하게 한다.
        // Article saved 라는 타입으로 반환한다.

        System.out.println(saved.toString());

localhost:8080/articles/new 로 이동하여 데이터를 직접 입력해 보면 아래와 같이 마지막에 id 값과 같이 출력되는것을 확인 할 수 있다. id값과 같이 출력되었다는 것은 DB에서 대표값 세팅한 값이 출력이 되었으므로, 정상적으로 출력이 되었다고 볼 수 있다.

대표값은 PK와 같은 개념으로 값을 추가입력 할수록 하나씩 올라간다.

728x90
반응형

'⭐ SpringBoot > 𝄜 게시판 with SpringBoot' 카테고리의 다른 글

9. 롬복과 리팩터링  (0) 2022.03.31
8. DB 테이블과 SQL  (0) 2022.03.31
6. 폼데이터 주고받기  (0) 2022.03.31
5. 뷰 템플릿과 레이아웃  (0) 2022.03.30
4. 모델, 뷰, 컨트롤러의 역할  (0) 2022.03.30