[Spring Boot] #8 데이터 생성 with JPA - Entity와 Repository

gogori6565·2024년 6월 14일
0

스프링 부트 공부

목록 보기
6/20

👉 Mission. JPA를 활용하여 DB에 데이터를 생성하시오


JPA 란?

DB는 SQL이라는 언어를 사용하기에 SpringBoot에서 사용하는 JAVA를 이해하지 못한다.
그럼 어떻게 JAVA로 DB에 명령할 수 있을까? ⇒ 이를 위한 도구가 JPA (Java Persistence API)

JPA의 핵심 도구 = Entity + Repository

  • Entity : 자바 객체를 DB가 이해할 수 있게 잘 규격화된 데이터
    - entity는 DB의 테이블이라고 생각하면 이해가 편함

  • Repository : 잘 규격화된 Entity는 Repository를 통해 DB에 전달되고 처리됨
    • DB의 테이블의 데이터들을 저장, 조회, 수정, 삭제 등을 할 수 있도록 도와주는 인터페이스

💻 JPA 활용 DB 저장, 실습

💡 과정 = DTO를 Entity로 변환하고, Repository를 통해서 DB에 저장

1. DTO를 Entity로 변환

[Controller]

파일명 : controller/ArticleController.java

	@PostMapping("/articles/create")
    public String createArticle(ArticleForm form) {
        System.out.println(form.toString());

        //1. Dto를 Entity로 변환!
        Article article = form.toEntity(); //form 이라는 DTO를 entity로 변환해 article(entity)에 저장
        System.out.println(article.toString()); //출력해보기

        //2.

        return "";
    }

Entity 패키지를 만들어 Article이라는 이름의 entity 파일을 만들어주어야 함

[Entity]

파일명 : entity/Article.java

@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 + '\'' +
                '}';
    }
}

JPA에서 Entity 객체를 정의할 때는 @Id 속성을 함께 정의해야 한다.
이 Id를 정의할 때는 직접 할당하는 방법과 자동 생성하는 방법이 있다.

1) 직접 할당

  • @Id 어노테이션만으로 id를 지정함

2) 자동 생성

  • @Id@GeneratedValue를 같이 사용한다.
  • Generation Type 옵션으로 전략을 지정한다.

2. Repository를 이용해 Entity를 DB에 저장
[Controller]

파일명 : controller/ArticleController.java

    @Autowired //(DI-의존성 주입)스프링 부트가 미리 생성해놓은 객체를 가져다가 자동으로 연결!
    private ArticleRepository articleRepository;

	...

    @PostMapping("/articles/create")
    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); //.save() - CrudRepository에 정의되어 있는 기능 사용
        System.out.println(saved.toString());

        return "";
    }

[Repository]

+) Repository는 파일 생성 시, java가 아니라 interface로 생성!!

파일명 : repository/AritlceRepository.java

public interface ArticleRepository extends CrudRepository<Article, Long> {
}

CrudRepository를 상속받아 사용!

📌 CrudRepository 란?
스프링 프레임워크에서 제공하는 인터페이스로, JPA와 함께 사용되어 DB의 CRUD작업을 단순화한다. CrudRepository는 기본적인 CRUD 메소드를 제공하며, 개발자는 이를 활용해 DB 조작을 간편히 수행할 수 있다!

  • CrudRepository<관리 대상 entity, 대상 entity의 대표값의 Type>

[ 디렉터리 구조 ]


@Autowired

자, 그런데 controller에서 articleRepository의 객체를 만들어줘야 하지 않나?

private ArticleRepository articleRepository = new ArticleRepository();

이런 식으로?

-> Spring Boot에서는 그렇게 안해도 @Autowired 를 추가하면 알아서 해준다!

@Autowired //(DI-의존성 주입)스프링 부트가 미리 생성해놓은 객체를 가져다가 자동으로 연결!
private ArticleRepository articleRepository;

🧷 [Spring] 의존성 주입(DI)이란?


📚정리

JPA 란, JAVA로 DB에게 명령할 수 있게 하는 도구

[ JPA의 핵심 도구 2가지 ]

  • Entity : 자바 객체를 DB가 이해할 수 있게 잘 규격화된 데이터
    - entity는 DB의 테이블이라고 생각하면 이해가 편함

  • Repository : 잘 규격화된 Entity는 Repository를 통해 DB에 전달되고 처리됨
    - DB의 테이블의 데이터들을 저장, 조회, 수정, 삭제 등을 할 수 있도록 도와주는 인터페이스

[ 폼 데이터를 어떻게 DB까지 저장할까? ]

  1. 폼 데이터를 DTO로 받고,
  2. DTO를 Entity로 변환한 후,
  3. Repository를 이용해 Entity를 DB에 저장!

강의 출처 : https://www.youtube.com/watch?v=_vDACE13Ubc&list=PLyebPLlVYXCiYdYaWRKgCqvnCFrLEANXt&index=1 [스프링 부트 입문 - 홍팍]

profile
p(´∇`)q

0개의 댓글