[Spring] Todo Entity 만들고 Todo 데이터를 H2에 채워넣기 (+ JPA 프레임워크 - @Entity)

민지·2024년 2월 22일
0

0. JPA 개념 recap + 흐름

JPA 개념 recap - TIL 링크

-> JPA를 한마디로 정리하자면, "JUST Map Entities TO Tables"

-> 해당 깃허브 흐름

  • 1번
    DB와 클래스를 매핑지어 자동 연결해주는 @Entity 어노테이션 (자바 빈을 만들어줄 클래스에 붙여줌)
  • 2번
    그럼, 연결한 데이터베이스 서버를, 이클립스의 자바 코드에서 관리해주고 사용해줘야 하니(ex, insert, delete, update 기능..), 해당 데이터베이스를 관리해줄 자바 클래스에 @Repository 붙여주기

1. Todo 클래스에 @Entity를 붙여 데이터베이스 서버와 자바 빈을 연결지어주고, @Id, @Column 설정도 해준다

  • Todo클래스에 @Entity 어노테이션을 붙여, 해당 todo bean이 - h2 데이터베이스 서버에 매핑되도록 해준다.


또 스프링부트의 놀라운 점은, @Entity가 붙은 자바 클래스를 발견하면, h2 데이터베이스에서 테이블을 자동으로 생성한다.

2. Todo data를 H2 데이터베이스에 넣어보자

  • data.sql 파일 생성
    • src/main/resources 하위에 data.sql 파일 존재
  • data.sql 파일에서는 쿼리 문장을 쓸 수 있고, 그 쿼리문이 실행될 것
  • data.sql 작성 시 주의할 점 - application.properties에서의 추가 설정
    기본적으로 data.sql은 엔디티가 처리되기 전에 실행된다. 테이블을 엔디티가 처리될 때 실행된다.
    (data.sql 실행 -> @Entity 어노테이션을 스프링부트 발견하고, h2 데이터베이스 서버에 해당 엔디티 클래스와 동일한 이름으로 테이블 생성)

다시 말해, data.sql에 정의된 쿼리가 실행되기 전에 테이블이 생성되지 않은 경우다!

따라서 해당 에러 수정을 위해 application.properties에서 추가 설정을 해주자.

spring.jpa.defer-datasource-initialization=true

그리고 data.sql에 다음과 같은 sql 코드를 작성해보자.

INSERT INTO todo
(ID, USERNAME, DESCRIPTION, DEADLINE, DONE)
VALUES (10001, 'h2 server','start h2 DB', CURRENT_DATE(), false);

그리고 h2 database local server에서 확인하니,

자바코드에서 쿼리문을 통해 넣은 데이터가 → 로컬서버의 h2 서버에 잘 들어간 것을 확인할 수 있었다!

마치며...

여기서 h2 database도 인메모리 데이터베이스이기에, 어플리케이션을 재실행하면 모든 h2서버에 저장한 데이터베이스가 사라진다.

그렇기에 MySQL 같은 데이터베이스를 사용하는 것!




참고 및 출처
이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/

profile
배운 내용을 바로바로 기록하자!

0개의 댓글