자바 언어를 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와 같은 개념으로 값을 추가입력 할수록 하나씩 올라간다.
'⭐ 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 |