BE/스프링 부트 3

DTO를 데이터 베이스에 저장하기

이제하네 2023. 11. 20. 12:00
  • 데이터 베이스와 JPA
    • 데이터 베이스란 쉽게 말하면 데이터를 관리하는 창고로써 모든 데이터를 행과 열로 구성된 테이블에 저장
    • DB 프로그램은 mySQL ,오라클, 마리아DB ,몽고DB ,H2 등 다양한 종류가 있음
    • JPA 를 사용하면 DB에 자바로 명령을 할수 있음
      • JPA 의 핵심 도구로써 엔티티와 리파지터리가 있다
        1. 엔티티(entity): 자바 객체를 DB가 이해할 수 있게 만든것 이를 기반으로 테이블 생성
        2. 리파지터리(repository): 엔티티가 DB 속 테이블에 저장 및 관리될 수 있게 하는 인터페이스
    • 간단히 하자면 DTO를 엔티티로 변환 후 리파지터리를 이용하여 엔티티를 DB에 저장

 

 

  1. DTO를 엔티티로 변환하기
    1. DTO 를 엔티티로 변환하기 위해 form 객체의 toEntity()라는 메서드를 호출해서 그 반환값을 Article타입의 article 엔티티에 저장
    2. Article 클래스 만들기
      1. main/java아래에있는 기본 패키지안에 entity 패키지를 생성후 그 안에 Article 클래스 생성
      2. Article 클래스에 코드작성
        1. 이 클래스가 엔티티 임을 선언하기위해 @Entity를 작성
          • @Entity 는 JPA 에서 제공하는 어노테이션으로 이 어노테이션이 붙은 클래스를 기반으로 DB에 클래스 이름과 동일한 테이블 이름을 생성
        2. DTO 코드를 작성 할때와 같이 title, content 필드를 선언 이 두 필들도 DB에서 인식할수 있도록 @Column 어노테이션을 작성하면 두 필드가 DB 테이블의 각 열과 연결
        3. 마지막으로 엔티티의 대푯값을 넣어야함 대푯값은 @Id 어노테이션은 붙임 이어서 @GeneratedValue 어노테이션을 붙여 대푯값을 자동으로 생성하게함
          • @GeneratedValue으로 대표값을 자동으로 생성하게 되면 1,2,3,이런식으로 자동으로 증가
          • 제목과 내용이 같은 것이 있더라고 대푯값 id로 다른글임을 구분가능
        4. Article 객체의 생성 및 초기화를 위해 생성자 와 toString()메서드 추가
    3. toEntity() 메서드 추가하기
      1. ArticleForm(DTO 클래스) 에 toEntity() 메서드 추가
      2. toEntity() 메서드에서는 폼 데이터를 담은 DTO 객체를 엔터티로 반환 전달값은 Article 클래스의 생성자 형식에 맞게 작성

1-1 아직 Article 클래스와 toEntity()메서드를 생성하지 않아 오류표시가 뜸
controller패키지와 동일 레벨에 entity패키지 생성
entity 클래스 파일
entity 파일안에 생성자와 toString()메서드 추가
ArticleForm안에 toEntity()메서드

 

  1. 리파지터리로 엔티티를 DB에 저장하기
    • articleRepository.save() 메서드를 호출해 article 엔티티를 저장. save() 메서드는 저장된 엔티티를 반환하므로 Article타입의 saved 라는 객체에 받아옴
    • 필드 선언부에 ArticleRepository 타입의 articleRepository 객체를 선언
  2. 리파지터리 만들기
    1. controller 패키지와 동일 레벨에 repository 패키지 생성
    2. repository 패키지안에 class파일을 생성하지만 이번에는 Interface를 선택한후 ArticleRepository 생성
    3. JPA 에서 제공하는 리파지터리 인터페이스를 활용해서 만들기 위해 ArticleRepository  다음에 extends Crud를 입력하면 여러 목록이 나타나는데 그중에 CrudRepository<T,ID>를 선택
    4. 이거는 JPA 에서 제공하는 인터페이스로 이를 상속받아 엔티티를 관리할 수 있다
      • 홀화살괄호(<>)을 붙이고 그 안에 2개의 제네릭 요소를 받음
        • Article: 관리 대상 엔티티의 클래스 타입
        • Long 관리 대상의 엔티티의 대표
    5. ArticleController 파일에 import com.example.firstproject.repository.ArticleRepository;을 임포트하면 오류 표시가 사라짐
  3. 객체 주입하기
    1. 스프링 부트에서는 객체를 만들지 안아도 @Autowired 어노테이션을 붙이면 스프링부트가 미리 생성해 놓은 객체를 가져다가 연결함 이를 의존성 주입(DI ,Depandency Injection)이라함
  4. 데이터 저장 확인하

ArticleController 파일 변경 하지만 아직 리파지터리가 없어서 빨간색 오류가 있음
controller패키지와 동일 레벨에 repository 패키지 생성
ArticleRepository   파일
@Autowired 를 통해 자동으로 객체 생성

 

결과 확인

 

 

  1. DB 데이터 조회하기
    • DB에 저장된 데이터는 테이블이라는 틀에 맞춰 관리됨
    • 테이블은 행과 열로 이루어져있음
    • CRUD 조작은 SQL이라는 언어로 수행 대표적인 SQL문법으로는 INSERT, SELECT,UPDATE,DELETE문이 있음
  2. H2 DB 접속하기
    1. resources에 있는 application.properties 파일 열기
    2. spring.h2.console.enabled=true 작성 이는 H2 DB에 웹 콘솔로 접근할 수 있도록 허용하는 설정
    3. 스프링 부트를 재시작하고 Ctrl + f 를 눌러 jdbc를 검색한후 그 전체를 복사해서 h2콘솔 JDBC URL 에 붙혀넣기
  3. 데이터 조회하기
    1. Article 테이블 클릭하면 SELECT * FROM ARTICLE ARTICLE 이 자동 작성됨
      • SELECT 문의 형식은 SELECT 속성명 FROM 테이블명;
      • *는 모든 이라는뜻
      • 여기서 ARTICLE테이블의 모든 속성을 조회 하라는뜻
    2. http://localhost:8080/articles/new 에 페이지에 제목과 내용을 작성하고 버튼을 누리면 H2 에 저장이 잘됨
    3. 직접 데이터를 삽입할 때는 INSERT 문을 사용
      • INSERT 문의 형식은 INSERT INTO 테이블명(속성명1 , 속석명2, ...)  VALUES (값1 , 값2, ...);

테이블에 저장이 잘됨
INSERT 문을 사용해서 데이터 삽입