Server

[H2 DB] H2 Database & Spring Boot 연동 방법

JinCode 2022. 2. 28. 22:10

H2 Database & Spring Boot 연동 방법

 

 

Spring Boot, H2 무설치 연동 방법 : https://adg0609.tistory.com/65

 

 

1. H2 DB 설치

| <다운로드> 사이트에 접속 한 뒤, H2 DB를 설치하시면 됩니다.

 

※ 1.4.200 버전 이상을 설치하면 보안상으로 JPA에서 테이블 자동생성 기능이 되지 않습니다.

1.4.200버전 혹은 이전 버전을 원하시면 <이전 버전 다운로드> 에서 설치할 수 있습니다.

 

 

 

2. 배치 파일 실행(h2.bat)

| 기본 경로에 설치하셨다면  C:\Program Files (x86)\H2\bin 폴더안에 h2.bat 파일을 실행하면 cmd와 h2 콘솔이 자동으로 브라우저에 뜨게 됩니다.

 

 

 

 

3. DB 생성 및 접속

JDBC URL 주소에 있는 jdbc:h2:~/test2 해당 부분의 뒷 부분이 DB파일명 입니다.

 

1. 데이터베이스가 없을 경우(생성) : jdbc:h2:~/데이터베이스명

2. 데이터베이스가 있을 경우(접속) : jdbc:h2:tcp://localhost/~/데이터베이스명

 

 

 

 

3-1. 데이터베이스 파일 위치

| 생성한 데이터베이스 파일 위치는 C:\Users\사용자 내에 위치하며 확장자는 .mv 입니다.

 

 

 


​4. Spring Boot와 H2 DB 연동

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/데이터베이스명
    username: sa
    password:
    driver-class-name: org.h2.Driver

| application.yml 에서 설정을 해야 합니다.

 

 

 

 

4.1 테스트

## User.class
@Entity
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column
    private String name;

    @Column
    private int age;

    @Builder
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

## DbConnection.class
public interface DbConnection extends JpaRepository<User, Long> {
}

## ApplicationTest.class
@Test
public void findAllUserTest() {
    User user1 = User.builder()
            .name("user1")
            .age(23)
            .build();
    User user2 = User.builder()
            .name("user2")
            .age(25)
            .build();
    dbConnection.save(user1);
    dbConnection.save(user2);

    final List<User> all = dbConnection.findAll();
    for (User user : all) {
        System.out.println("user = " + user.getName());
    }

}

| User Entity를 생성하고 Spring Data Jpa로 테스트를 해 보았습니다.

 

 

 

2022-02-28 22:08:15.208 DEBUG 2444 --- [           main] org.hibernate.SQL                        : 
    insert 
    into
        user
        (id, age, name) 
    values
        (default, ?, ?)
2022-02-28 22:08:15.211 TRACE 2444 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [INTEGER] - [23]
2022-02-28 22:08:15.212 TRACE 2444 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [VARCHAR] - [user1]
2022-02-28 22:08:15.224 DEBUG 2444 --- [           main] org.hibernate.SQL                        : 
    insert 
    into
        user
        (id, age, name) 
    values
        (default, ?, ?)
2022-02-28 22:08:15.225 TRACE 2444 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [INTEGER] - [25]
2022-02-28 22:08:15.225 TRACE 2444 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [VARCHAR] - [user2]
2022-02-28 22:08:15.317 DEBUG 2444 --- [           main] org.hibernate.SQL                        : 
    select
        user0_.id as id1_0_,
        user0_.age as age2_0_,
        user0_.name as name3_0_ 
    from
        user user0_
2022-02-28 22:08:15.319 TRACE 2444 --- [           main] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_0_] : [BIGINT]) - [1]
2022-02-28 22:08:15.320 TRACE 2444 --- [           main] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([age2_0_] : [INTEGER]) - [23]
2022-02-28 22:08:15.321 TRACE 2444 --- [           main] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([name3_0_] : [VARCHAR]) - [user1]
2022-02-28 22:08:15.321 TRACE 2444 --- [           main] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([id1_0_] : [BIGINT]) - [2]
2022-02-28 22:08:15.321 TRACE 2444 --- [           main] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([age2_0_] : [INTEGER]) - [25]
2022-02-28 22:08:15.321 TRACE 2444 --- [           main] o.h.type.descriptor.sql.BasicExtractor   : extracted value ([name3_0_] : [VARCHAR]) - [user2]
user = user1
user = user2

| insert 및 find가 잘 작동하는것을 볼 수 있습니다.