JAVA Spring boot DB안에 데이터 넣어보기
안녕하세요 Yagsill 입니다.
오늘은 DB안에 데이터를 날려볼건데여!
여러가지 기본적인 용어를 알아야 합니다.
1. DTO 객체 만들기
웹에서 데이터를 날렸을때 그 데이터가 DTO 데이터로 변환되어서 들어와야 합니다.
그래서 우리는 해당 데이터를 DTO라는 객체로 만들어서 받아주어야 합니다.
public class ArticleForm {
private String title;
private String content;
public ArticleForm(String title, String content) {
this.title = title;
this.content = content;
}
@Override
public String toString() {
return "ArticleForm{" +
"title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
}
2. DTO 데이터를 인식하고 변환해야합니다.
일단 웹에서 데이터를 날렸고 -> DTO 객체로 데이터를 받았습니다.
그렇다면 해당 DTO객체를 DB에 저장하기 위해서는 DB로 들어갈 수 있게 데이터를 변환해주어야 하겠죠?
이럴 때 Entity라는 하나의 행 데이터 객체로 집어넣어야 합니다.
@Entity // DB가 해당 객체를 인식할 수 있슴!
public class Article {
@Id //대표값을 하나 넣어주어야 함. 약간 기본키 가튼 느낌.
@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 + '\'' +
'}';
}
}
-> 어노테이션으로 Entity를 import 시켜야 합니다. 그래야지 DB에서 인식이 된다고 합니다.
-> DB를보면 기본키가 있어야 하잖아요? 그래서 우리는 @Id로 대표값을 넣어줍니다.
-> @GeneratedValue는 1.2.3....알아서 순서를 메겨주는 어노테이션이라고 생각하심됩니다.
-> @Column은 엑셀로 따져보면 "열" 이라는 뜻입니다.
-> 이 후 객체의 생성자를 추가해주면 됩니다.
3. Repository를 이용해 DB에 값을 CRUD(Create 만들고, Read 읽고, Update 수정하고, Delete 삭제하고) 해봅시다.
일단 Entity로 DB의 구조를 만들었다면 여기에 이제 값을 넣고 읽고 뭐하고 다 해야겠죠? 그러기 위해서 우리는 Spring boot JPA에서 제공하는 CrudRepository 라는 인터페이스를 상속받아서 사용할겁니다.
CrudRepository 인터페이스는 알아서 읽고 쓰고 수정하고 삭제하고 다 할 수 있습니다.
// Spring boot JPA에서 제공하는 crudRepository라는 인터페이스를 상속받아서 사용
// 만들고, 읽고, 쓰고, 삭제하기 까지 다 되는것이다.
// 여기에 두개의 파라메터 관리대상 Entity인 Article과 Article의 대표값의 타입 Long을 넣어줘야함.
public interface ArticleRepository extends CrudRepository<Article,Long> {
}
두개의 파라메터를 받아서 사용해야 하는데요.
entity로 DB의 구조를 만들었잖아여? 그 DB의 구조는 제가 위에서 설명한 것처럼 Article이라는 이름을 가지고 있써여
그래서 두개의 파라메터중 첫번째 파라메터는 Article을 넣어줍니다. 그리고 두번째 인자로는 Article의 기본키는 Id였죠? 그 Id의 타입을 넣어주면 됩니다.
이렇게되면
웹에서 Submit해봅시다.
짠 아주 잘 들어왔네요~!!
그리고 이 것을 프린트로 찍기위해서는
@Controller
public class articleController {
@Autowired // 스프링 부트가 미리 생성해놓은 객체를 가져다가 자동으로 연결해 준다.
private ArticleRepository articleRepository;
@PostMapping("articles/create")
//DTO로 데이터를 받아옴.
public String createArticle(ArticleForm form){
System.out.println(form.toString());
//1. Dto를 변환(Entitu!)
//Article은 타입임. toEntity라는 메소드(값들을 리턴하는 메소드이다)
Article article = form.toEntity();
System.out.println(article.toString());
//2 Repository에게 Entity를 저장하게 함
Article saved = articleRepository.save(article);
System.out.println(saved.toString());
return "";
}
}
Controller에서 이렇게 해주어야 합니다.~~
즐거운 코딩하세용~!~