Section 1. JPA
1. JPA (Java Persistence API)
Java 객체와 관계형 DB 사이를 매핑하는 ORM 기술 표준
- 기존의 반복 코드는 물론이고, 기본적인 SQL 도 JPA 가 직접 만듬
- SQL 과 데이터 중심 설계 -> 객체 중심의 설계
- 인터페이스 (=기술 표준) 이므로 실제 구현체는 Hibernate 등등
2. JPA 환경 설정
// jdbc 도 포함하고 있음
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
- properties 추가
- show-sql : JPA가 생성하는 SQL을 출력한다.
- ddl-auto : 테이블을 자동으로 생성 기능 (create 지정하면 테이블도 자동 생성)
3. JPA Entity 지정
- @Entity Annotation 지정
- Id = primary key, GenerateValue = DB가 값을 자동으로 생성, IDENTITY = 식별
- @Column Annotation 값과 일치하는 컬럼에 매핑
4. JPA Repository 생성
- EntityManager 객체 사용 (Spring Boot 가 자동으로 bean 생성)
5. insert 기능
- 알아서 member 객체 안에 존재하는 id, name 값을 매핑해서 튜플로 저장
6. select 기능
- find 메서드 이용
- Member.class 와 같이 Entity 객체의 클래스를 지정
- Member m = Member as m (앨리어싱)
- :name 부분에 setParameter 값 매핑
7. 나머지 설정
- Service 객체 @Transactional Annotation 지정
@Transactional // JPA 사용시에 필수 어노테이션 설정
public class MemberService {...}
- Config 파일에서 Repository 구현체 변경
private EntityManager em;
@Bean
public MemberRepository memberRepository() {
JdbcTemplateMemberRepository(dataSource);
return new JpaMemberRepository(em);
}
8. Hibernate SQL 쿼리
- 회원 등록 시 insert 쿼리가 JPA 를 통해서 생성되어 전송됨
Section 2. Spring Data JPA
1. Spring Data JPA
개발자가 JPA 를 더 쉽고 편하게 사용할 수 있도록 JPA 를 한 단계 추상화시킨 Repository 인터페이스를 제공
2. Spring Data JPA Repository
- JpaRepository 를 상속받은 SpringDataJpaMemberRepository 인터페이스가 자동으로 구현체로 생성되어 bean 등록됨
- JpaRepository <Entity 명, primary key Type>
- Entity (Model) 객체 또한 상속 받음
- findByName() , findByEmail() 처럼 메서드 이름 만으로 조회 기능 제공 (프로젝트에 알맞게 이름 지정)
3. Config 파일
- 자동으로 생성된 JpaRepository 구현체가 자동으로 @Autowired DI 됨
4. Spring Data JPA Repository 인터페이스
- CRUD 작업등 공통적인 DB 접근 및 조작 추상 메서드 존재
- 개발자의 프로젝트에 맞게 메서드명 지정