반응형
H2 database 다운로드
http://h2database.com/html/download.html
drive 버전 맞춰야
pom.xml
<dependencies>
<!-- JPA 하이버네이트 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.10.Final</version>
</dependency>
<!-- H2 데이터베이스 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.199</version>
</dependency>
</dependencies>
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="hello">
<properties>
<!-- 필수 속성 -->
<property name="javax.persistence.jdbc.driver"
value="org.h2.Driver" />
<property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.password" value="1234" />
<property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/test" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<!-- 옵션 -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.use_sql_comments" value="true" />
<!--<property name="hibernate.hbm2ddl.auto" value="create" /> -->
</properties>
</persistence-unit>
</persistence>
하이버네이트 properties <참고>
hibernate.dialect 데이터베이스 방언 설정
- JPA는 특정 데이터베이스에 종속되지 않는다.
따라서, 애플리케이션의 구성에 맞게 데이터베이스를 설정할 수 있다. - 각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다름
가변 문자: MySQL은 VARCHAR, Oracle은 VARCHAR2
문자열을 자르는 함수: SQL 표준은 SUBSTRING(), Oracle은 SUBSTR()
페이징: MySQL은 LIMIT , Oracle은 ROWNUM - 방언: SQL 표준을 지키지 않는 특정 데이터베이스만의 고유한 기능
- hibernate.dialect 속성에 지정
하이버네이트는 40가지 이상의 데이터베이스 방언 지원한다.- H2 : org.hibernate.dialect.H2Dialect
- Oracle 10g : org.hibernate.dialect.Oracle10gDialect
- MySQL : org.hibernate.dialect.MySQL5InnoDBDialect
테스트 케이스 용 데이터베이스 설정
테스트는 케이스 격리된 환경에서 실행하고, 끝나면 데이터를 초기화하는 것이 좋다. 그런 면에서 인 메모리 DB를 사용하는 것이 가장 이상적이다.
H2에서 제공하는 인메모리 데이터베이스를 사용하면 된다.
www.h2database.com/html/features.html#in_memory_databases
추가로 테스트 케이스를 위한 스프링 환경과, 일반적으로 애플리케이션을 실행하는 환경은 보통 다르므로 설정 파일을 다르게 사용하자.
다음과 같이 간단하게 테스트용 설정 파일을 추가하면 된다.
다음 경로에 인 메모리 데이터베이스 설정 파일을 추가해준다.
test/resources/persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="hello">
<properties>
<!-- 필수 속성 -->
<property name="javax.persistence.jdbc.driver"
value="org.h2.Driver" />
<property name="javax.persistence.jdbc.user" value="sa" />
<property name="javax.persistence.jdbc.password" value="1234" />
<property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:testdb" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<!-- 옵션 -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.use_sql_comments" value="true" />
<!--<property name="hibernate.hbm2ddl.auto" value="create" /> -->
</properties>
</persistence-unit>
</persistence>
application.yaml 을 이용할 경우
spring:
datasource:
url: jdbc:h2:mem:testdb
username: sa
password:
driver-class-name: org.h2.Driver
jpa:
hibernate:
ddl-auto: create
properties:
hibernate:
# show_sql: true
format_sql: true
logging:
level:
org.hibernate.SQL: debug
org.hibernate.type: trace
스프링에서는 테스트 실행 시, test/resources 위치에 있는 설정 파일을 먼저 읽고, 만약 이 위치에 설정 파일이 없으면 src/resources 위치에서 찾는다.
스프링 부트는 datasource 설정이 없으면, 기본적을 메모리 DB를 사용하고, driver-class도 현재 등록된 라이브러를 보고 찾아준다. 추가로 ddl-auto 도 create-drop 모드로 동작한다. 따라서 데이터소스나, JPA 관련된 별도의 추가 설정을 하지 않아도 된다.
반응형
'Spring > JPA & Hibernate' 카테고리의 다른 글
영속성 컨텍스트 (0) | 2019.12.18 |
---|---|
JPA Example (0) | 2019.12.18 |
고급 매핑 (0) | 2019.12.17 |
연관관계 맵핑 (0) | 2019.11.21 |
JPA (0) | 2019.10.30 |