👉 Mission. JPA를 활용하여 DB에 데이터를 생성하시오
DB는 SQL이라는 언어를 사용하기에 SpringBoot에서 사용하는 JAVA를 이해하지 못한다.
그럼 어떻게 JAVA로 DB에 명령할 수 있을까? ⇒ 이를 위한 도구가 JPA (Java Persistence API)
💡 과정 = 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
를 같이 사용한다. 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
>
[ 디렉터리 구조 ]
자, 그런데 controller에서 articleRepository의 객체를 만들어줘야 하지 않나?
private ArticleRepository articleRepository = new ArticleRepository();
이런 식으로?
-> Spring Boot에서는 그렇게 안해도 @Autowired
를 추가하면 알아서 해준다!
@Autowired //(DI-의존성 주입)스프링 부트가 미리 생성해놓은 객체를 가져다가 자동으로 연결!
private ArticleRepository articleRepository;
JPA 란, JAVA로 DB에게 명령할 수 있게 하는 도구
[ JPA의 핵심 도구 2가지 ]
[ 폼 데이터를 어떻게 DB까지 저장할까? ]
강의 출처 : https://www.youtube.com/watch?v=_vDACE13Ubc&list=PLyebPLlVYXCiYdYaWRKgCqvnCFrLEANXt&index=1 [스프링 부트 입문 - 홍팍]