Spring Boot - Data JPA
· 2 min read
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를 사용하겠다.
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
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
@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
public interface CustomerRepository extends JpaRepository<Customer, Long> {
}
JpaRepository
를 상속받는 것 만으로도 기본적인 CRUD가 가능하다. 또한, query-creation을 이용하여 쿼리를 작성할 수 있다.`
Test Code
@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));
}
}