이번에는 간단한 테이블 2개를 만들고, h2 database와 연동을 하려 합니다.
먼저 dependency를 추가해 줍니다. JPA도 사용할 예정이니 JPA도 추가해 줍니다.
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2'
다음으로는 h2 database에 대한 정보를 설정해줍니다.
현재 사용중인 spring-boot version은 2.7.12 이며, 해당 버전에 맞는 h2 database 버전은 2.1.214 입니다.
어느 버전 이상부터 path로 접근하여 파일을 만들었던 것이 적용이 되지 않아서, 제가 사용한 방법은 저장하려는 위치에
[data-base name].mv.db
와 같은 식으로 파일을 만들어서 해당 파일에 tcp로 접근하는 것으로 해결하였습니다. 여기에서는 [ my-project.mv.db ] 로 파일을 만들었습니다.
이제 h2 console을 실행하고 접속을 해보도록 하겠습니다.
현재 제 파일의 위치는 D:\H2\db\my-project 입니다.
해당 정보로 연결을 시도하면 정상적으로 연결이 되는 것을 확인할 수 있습니다.
이제 위의 정보를 바탕으로 spring-boot에 접속정보를 설정하도록 하겠습니다.
먼저 h2 db property 설정은 src/main/resources/application.properties에 설정하면 되는데 저는 여기서 .properties 가 아닌 .yml를 사용하도록 하겠습니다.
//application.yml
spring:
datasource:
url: jdbc:h2:tcp://localhost/D:\H2\db\my-project
username: sa
password:
driver-class-name: org.h2.Driver
url은 h2 console에서 접속할 때 사용한 JDBC URL 입니다.
여기서는 ORM을 사용하기에 간단한 entity를 만들어보도록 하겠습니다.
2개의 엔티티를 만들건데요, posts와 comments를 만들 예정입니다.
posts: 제목과 내용에 대한 컬럼이 존재한다.
comments: posts의 댓글에 해당하는 엔티티이다.
posts와 comments 는 1:N 관계를 갖고있으며, 서로 양방향 관계를 맺고 있습니다.
//Posts
package com.demo.myproject.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;
@Entity
@Getter
@NoArgsConstructor
public class Posts {
@Id
@Column(name = "PTS_ID")
@GeneratedValue
private Long id;
@Column(name = "PTS_TITLE")
private String title;
@Column(name ="PTS_CONTENT")
private String content;
@OneToMany(mappedBy = "posts", fetch = FetchType.LAZY)
private List<Comment> commentList = new ArrayList<>();
}
//comments
package com.demo.myproject.domain;
import lombok.Getter;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@Entity
@Getter
@NoArgsConstructor
public class Comment {
@Id
@GeneratedValue
@Column(name = "CMT_ID")
private Long id;
@Column(name = "CMT_CONTENT")
private String content;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "POSTS_ID")
private Posts posts;
}
마지막으로 나머지 jpa property를 설정하도록 하겠습니다.
//application.yml
jpa:
#hibernate setting
hibernate:
ddl-auto: create
properties:
hibernate:
#system.out
show_sql: true
#format pretty
format_sql: true
#logging
logging:
level:
org.hibernate:
# sql leverl
sql: debug
# sql show sql parameter
type: trace
이제 spring-boot를 실행 후 h2 console에 들어가보면 생성한 entity가 생성된 것을 확인할 수 있습니다.