SPRING/스프링부트 개념과 활용
[스프링부트 개념과 활용] JPA 연동
JUMP개발자
2021. 1. 11. 00:45
ORM
Object Relational Mapping의 약자.
객체와 릴레이션을 mapping 할 때 발생하는 개념적인 불일치를 해결하는 프레임워크.
JPA
Java Persistence API의 약자.
여러가지 ORM 해결책들 중에서 자바에 대한 표준을 정한 것을 말한다.
예제
Pom.xml 의존성 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
Entity 구현
package com.springstudy.jpa.account;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.util.Objects;
@Entity
public class Account {
// Id : PRIMARY KEY
// GeneratedValue : 자동증가값
@Id @GeneratedValue
private Long id;
private String username;
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Account account = (Account) o;
return Objects.equals(id, account.id) &&
Objects.equals(username, account.username) &&
Objects.equals(password, account.password);
}
@Override
public int hashCode() {
return Objects.hash(id, username, password);
}
}
Getter, Setter 외에 equals와 hashCode도 생성하는 것이 좋다.
package com.springstudy.jpa.account;
import org.springframework.data.jpa.repository.JpaRepository;
public interface AccountRepository extends JpaRepository<Account, Long> {
// Username을 조건으로 Select하는 method
Account findByUsername(String username);
}
JpaRepository를 extends하여 Respository interface를 생성한다.
(JpaRepository 상속시 @Repository 를 추가할 필요 없음)
JpaRespository<'entityType', 'id Type'>
또한 findByUsername과 같이 규칙에 맞는 메서드를 추가할 수 있다.
Application.properties
spring.datasource.hikari.maximum-pool-size=8
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://localhost:3306/prj_m
spring.datasource.username=root
spring.datasource.password=
TestCASE
위 테스트케이스와 같이 슬라이스 테스트를 하려면 인메모리 데이터 베이스를 사용해야한다.
해당 케이스에서는 H2를 사용하였다.
로그를 보면 테이블 생성, Insert, Select 등의 쿼리가 실행되는 것을 알 수 있다.
Runner를 이용한 JPA 로직 실행 (MYSQL)