1. JPA란
JPA는 객체-관계 매핑 (ORM)을 지원
쿼리를 직접 작성하지 않기 때문에 SQL 중심 설계를 객체 중심 설계로 전환
개발 생산성 크게 상승
2. 환경 설정
//build.gradle
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-data-jpa' //jpa 라이브러리 추가
runtimeOnly 'com.h2database:h2' // 데이터베이스 관련
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
...
}
// resources/application.properties
spring.jpa.show-sql=true // jpa 가 생성하는 SQL 출력
spring.jpa.hibernate.ddl-auto=none // jpa 테이블 자동 생성 기능 off
3. jpa 회원 관리 구현
// domain/Member
...
@Entity // 어노테이션을 통해 jpa 관리하의 Entity 임을 선언
public class Member {
@Id // pk 선언
@GeneratedValue(strategy = GenerationType.IDENTITY) // 기본키 자동 생성 (strategy=생성전략), 증가열에 따라 자동으로 기본키 생성
private Long id;
private String name;
// Column 명과 일치하지 않을 경우 @Column(name=) 으로 매핑
...
}
// repository/JpaMemberRepository
public class JpaMemberRepository implements MemberRepository{
private final EntityManager em; // EntityManager: DB와의 통신 담당
public JpaMemberRepository(EntityManager em) {
this.em = em; // 생성자를 통해 DB 주입
}
...
}
// service/MemberService
import org.springframework.transaction.annotation.Transactional
@Transactional // 커밋, 롤백 등과 같은 복잡한 트랜잭션 작업을 직접 처리 하지 않도록
public class MemberService {
...
}
// SprinngConfig
@Configuration
public class SpringConfig {
private final DataSource dataSource; // DB 연결 객체
private final EntityManager em; // EntityManager 생성
// 데이터 소스 주입
public SpringConfig(DataSource dataSource, EntityManager em) {
this.dataSource = dataSource;
this.em = em;
}
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new JpaMemberRepository(em);
}
}
'백앤드 개발 > Java & Spring' 카테고리의 다른 글
[Spring boot] 회원, 주문 프로젝트 - 객체 지향 원리 적용 (0) | 2023.11.07 |
---|---|
[Spring boot] 회원, 주문 프로젝트 - 설계 및 구현 (0) | 2023.11.06 |
[Spring boot] 프로젝트 환경 설정과 Spring 어플리케이션 구조 (0) | 2023.10.25 |
[Java] 컬렉션 프레임워크 실습 (0) | 2023.10.19 |
[Java] 컬렉션 프레임워크 (1) | 2023.10.19 |