-
[스프링부트 개념과 활용] JPA 연동SPRING/스프링부트 개념과 활용 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)
'SPRING > 스프링부트 개념과 활용' 카테고리의 다른 글
[스프링부트 개념과 활용] REDIS (1) 2021.01.16 [스프링부트 개념과 활용] 데이터베이스 초기화 (0) 2021.01.16 [스프링부트 개념과 활용] MYSQL 연동 & DBCP (0) 2021.01.10 [스프링부트 개념과 활용] 인메모리 데이터베이스(H2) (0) 2021.01.09 [스프링 개념과 활용] CORS (0) 2021.01.07