본 글은 Youtube - 홍팍님의 강의를 참고하여 작성하였습니다.
데이터베이스에 데이터를 저장하기 위해서는 SQL문 즉, 쿼리문을 사용해야한다.
따라서 자바 언어만으로는 데이터베이스에 접근하기 어렵다.
이를 해결하기 위한 방법이
SpringBoot 프로젝트를 처음 만들 때 dependecies에 추가하였던
JPA를 사용해줄 것이다.
Entity
자바 객체를 DB가 이해할 수 있도록 규격화 된 데이터
규격화된 Entity는 Repository라는 일꾼을 통해서 DB에게 전달되어 처리됩니다.
Repository
DTO - Entity - Repository - DB에 저장하는 과정을 살펴보겠습니다.
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
를 해결해주겠습니다.
아래 코드를 작성해줍니다.
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를 만들어봅시다.
코드를 다시 추가해줍니다.
@Autowired // 스프링 부트가 미리 생성해 놓은 객체를 가져다가 자동 연결! ArticleRepository articleRepository ... // 2. Repository에게 Entity를 DB안에 저장하게 함! Article saved = articleRepository.save(article); System.out.println(saved.toString());
따로 객체를 생성해주지 않아도 @Autowired
어노테이션을 통해 자동으로 연결해줍니다.
articleRepository
와 save()
에도 오류가 나는데 이 또한 정의해주어야한다.
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에 Crud를 담당하는 Repository CrudRepository
를 extends
해주고 <> 꺽쇠에 두 가지 값을 넣어줍니다.
첫 번째에는 어떤 값을 다룰지에 대한 클래스를, 두 번째는 id값의 타입을 넣어줍니다.
이 CrudRepository
에 save
를 제외한 여러가지 메서드가 존재하는데 궁금하면
Command를 누르고 클릭하면 확인할 수 있다.
오류가 없어진 것을 볼 수 있다 (오류가 날 시 import 해주세요)
save()
안에는 Article을 객체로 만들었던 article
을 넣어줍니다.
이제 출력문으로 saved객체의 값을 출력해주면
id값이 자동으로 생성되면서 입력값을 데이터베이스에 저장되게 됩니다.