#3에서 폼 데이터를 생성하여 DTO객체에 넣고 확인해보기까지 해보았는데 이제 DB에 넣는 과정도 해보겠다.
client -> server -> database
(H2라는 DB를 사용할 예정)
DB는 Java를 모르고 SQL언어만 이해한다.
JPA는 DB가 JAVA를 이해하게 해주고, 여러 기능도 제공한다.
폼 데이터를 가져와서 Article타입의 entity로 변환해준다.
Article article = form.toEntity();
Article타입의 entity가 없으므로 Article.java 클래스를 만든다.
(entity패키지를 생성하여 그 안에 Article.java)
DB가 해당 객체를 인식 가능하게 @Entity 어노테이션을 붙여준다.
마찬가지로 DB의 테이블이라는 단위와 연결해줌.
// entity/Article.java
@Entity
public class Article {
@Id //대표값 지정
@GeneratedValue //자동 생성 어노테이션
private Long id;
@Column
private String title;
@Column
private String content;
... 생성자
... toString()
}
ArticleForm.java에 form을 entity로 변환해주는 toEntity()메소드를 만든다.
// dto/ArticleForm.java
public Article toEntity() {
return new Article(null, title, content);
// Article.java의 생성자에 맞게 작성해준다.
}
Article saved = articleRepository.save(article);
Repository 패키지에 인터페이스 형식의 ArticleRepository.java를 생성
JPA에서 제공하는 리포지터리 인터페이스를 활용하여 쉽게 만들 수 있다.
public interface ArticleRepository extends CrudRepository<Article,Long> {
}
대상 entity를 create, read, update, delete 하는 기능을 추가 코드없이 확장받아 사용 가능해진다.
T : 리포지토리가 관리하는 도메인 유형 ( entity 이름)
ID : 엔티티 id의 데이터 타입
create = insert
read = select
update
delete
new키워드 등의 새로운 객체 생성없이 스프링부트가 만들어둔 객체에 연결만 하여 사용 가능.
@Autowired
private ArticleRepository articleRepository;
//AritcleController.java
...
@Controller
public class ArticleController {
@Autowired
private ArticleRepository articleRepository;
@GetMapping("/articles/new")
public String newArticleForm(){
return "articles/new";
}
@PostMapping("/articles/create")
public String createArticle(ArticleForm form){
System.out.println(form.toString());
//1
Article article = form.toEntity();
System.out.println(article.toString());
//2
Article saved = articleRepository.save(article);
System.out.println(saved.toString());
return "";
}
}
사용자에게 입력받은 폼데이터를 DTO객체에 보관.
폼데이터를 엔티티로 변환.
엔티티를 리포지토리를 통해 DB에 저장.