spring boot #4

·2022년 4월 16일
0

spring

목록 보기
5/22

#3에서 폼 데이터를 생성하여 DTO객체에 넣고 확인해보기까지 해보았는데 이제 DB에 넣는 과정도 해보겠다.

JPA를 활용해 DB에 데이터 생성하기.

client -> server -> database

(H2라는 DB를 사용할 예정)

DB는 Java를 모르고 SQL언어만 이해한다.
JPA는 DB가 JAVA를 이해하게 해주고, 여러 기능도 제공한다.

1. DTO를 Entity(규격화된 데이터)로 변환

폼 데이터를 가져와서 Article타입의 entity로 변환해준다.

Article article = form.toEntity();

Article타입의 entity가 없으므로 Article.java 클래스를 만든다.
(entity패키지를 생성하여 그 안에 Article.java)

@Entity

DB가 해당 객체를 인식 가능하게 @Entity 어노테이션을 붙여준다.

@Column

마찬가지로 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의 생성자에 맞게 작성해준다.
    }

2. Repository라는 일꾼을 통해 DB로 전달된다.

Article saved = articleRepository.save(article);

Repository 패키지에 인터페이스 형식의 ArticleRepository.java를 생성

JPA에서 제공하는 리포지터리 인터페이스를 활용하여 쉽게 만들 수 있다.

public interface ArticleRepository extends CrudRepository<Article,Long> {
}

CrudRepository<T,ID>

대상 entity를 create, read, update, delete 하는 기능을 추가 코드없이 확장받아 사용 가능해진다.

T : 리포지토리가 관리하는 도메인 유형 ( entity 이름)
ID : 엔티티 id의 데이터 타입

create = insert
read = select
update
delete

@Autowired

new키워드 등의 새로운 객체 생성없이 스프링부트가 만들어둔 객체에 연결만 하여 사용 가능.

	@Autowired
    private ArticleRepository articleRepository;
    

  1. 사용자의 입력 > 폼데이터를 DTO객체에 저장
  2. 엔티티로 변환
  3. DB에 저장 _ 고유번호 ID가 생김.

정리

//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에 저장.

0개의 댓글

관련 채용 정보