스프링부트 프로젝트를 하나 생성한다.(세팅하는 시간이 확 줄어들기 때문)
아래 링크를 참조하여 데이터베이스를 띄운다.
참고: https://velog.io/@max9106/Spring-Boot-PostgreSQL
JPA 프로그래밍에 필요한 의존성과 데이터베이스 드라이버 의존성을 추가해준다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
하이버네이트와 JPA가 들어온다.
기본적으로 spring data jpa를 사용할 것이라서 직접적으로 하이버네이트와 JPA를 사용할 일은 거의 없다.
그 다음으로, application.properties에 데이터베이스에 접근할 수 있는 정보들을 적어준다.
spring.datasource.url=jdbc:postgresql://localhost:5432/springdata(DB이름)
spring.datasource.username=junseo(유저이름)
spring.datasource.password=pass(비밀번호)
하이버네이트 관련 설정도 해줘야한다.
spring.jpa.hibernate.ddl-auto=create(애플리케이션 실행 시마다 스키마 새로 생성. 개발할 때만 사용. 보통 validate사용)
이제 Account 라는 도메인 모델을 만들어서 사용해보겠다.
@Entity: 이 클래스가 데이터베이스의 'account'라는 테이블에 매핑이되는 클래스라는 걸 알려주는 애노테이션
@Id: primary key에 매핑되는 것
@GeneratedValue: 자동으로 생성되는 값을 사용.
이 상태에서 애플리케이션을 실행하면, application.properties의 정보들을 사용하여 dataSource라는 타입의 빈을 만들고, hibernate 자동설정이 동작한다.
즉, JPA를 사용하는 데 필요한 빈들이 모두 자동으로 등록이된다.
ApplicationRunner를 이용하여 실행해보겠다.
@PersistenceContext라는 JPA 애노테이션을 이용하여, EntityManager라는 JPA의 가장 핵심적인 클래스 타입의 빈을 주입받을 수 있다.
이 클래스를 사용하여, entity들을 영속화 할 수 있다.(데이터베이스에 저장)
EntityManager와 관련된 오퍼레이션들은 반드시 한 트랜잭션안에서 일어나야 한다. 따라서 @Transactional 애노테이션을 붙여준다.
잘 실행됨을 볼 수 있다.
jpa말고 하이버네이트도 사용할 수 있다.
하이버네이트의 가장 핵심적인 API는 Session이다.
하이버네이트도 잘 실행됨을 볼 수 있다.