Spring Boot에서 간단한 설정으로 Hibernate를 사용할 수 있다.

JPA? Hibernate?

JPA: Java Persistence API의 줄임말로, 관계형 데이터베이스의 관리를 표현하는 자바 API이다.

Hibernate: 자바를 위한 오픈소스 ORM(Object-relational mapping) 프레임워크를 제공한다. 버전 3.2와 그 이후 버전에서는 JPA를 위한 구현을 제공한다.

Data JPA: JPA기반의 Repository를 쉽게 구현할 수 있도록 Spring Data에서 제공한다.

Dependency

간단한 예제를 만들기 위해 h2를 사용하겠다.

1
2
3
4
5
6
dependencies {
compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.projectlombok:lombok')
runtime('com.h2database:h2')
testCompile('org.springframework.boot:spring-boot-starter-test')
}

Properties

1
2
3
4
spring.jpa.database=H2

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE

Entity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Entity
@Data
@AllArgsConstructor
public class Customer {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long idx;

@Column(length=50)
private String name;

@Column(length=14)
private String tel;

private String etc;

protected Customer() {}
}

@Entity는 해당 클래스가 JPA의 Entity임을 나타낸다.

Repository

1
2
3
public interface CustomerRepository extends JpaRepository<Customer, Long> {

}

JpaRepository를 상속받는 것 만으로도 기본적인 CRUD가 가능하다. 또한, query-creation을 이용하여 쿼리를 작성할 수 있다.`

Test Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@RunWith(SpringRunner.class)
@DataJpaTest
public class CustomerRepositoryTests {

@Autowired
private CustomerRepository repository;

private Customer customer() {
return new Customer("heo won chul", "010-xxxx-xxxx", "developer");
}

@Test
public void test_insert() {
assertEquals(repository.save(customer().getIdx()), customer().getIdx());
}

@Test
public void test_select() {
assertNull(repository.findOne(1L));
}
}