JPA 소개
Java Persistence API, 자바 진영의 ORM 기술 표준
- 객체지향 프로그래밍 언어와 관계형 데이터베이스 중간에서 패러다임 일치를 시켜주기 위한 기술
- 개발자는 객체지향적으로 프로그래밍
-> JPA가 관계형 데이터베이스에 맞게 SQL을 대신 생성해서 실행
- SQL에 종속적인 개발을 하지 않아도 됨
- 생산성 향상, 유지보수 용이
ORM
- Object-relational mapping(객체 관계 매핑)
- 객체는 객체대로, RDB는 RDB대로 설계
- ORM 프레임워크가 중간에서 매핑
Spring Data JPA
- 구현체(Hibernate, Eclipse Link 등)들을 좀 더 쉽게 사용하고자 추상화 시킨 모듈
- 구현체 용이성
-> Hibernate 외에 다른 구현체로 쉽게 교체하기 위함
- 저장소 교체의 용이성
-> 관계형 데이터베이스 외에 다른 저장소로 쉽게 교체하기 위함
JPA 구현
build.gradle에 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
Entity 생성
- @Entity
- 테이블과 링크될 클래스
- 기본값으로 클래스의 카멜케이스 이름을 언더스코어 네이밍(_)으로 테이블 이름을 매칭
- @Id
- @GeneratedValue
- PK의 생성 규칙
- GenerationType.IDENTITY 옵션 추가 시 auto_increment
- @Column
- 기본값 외에 추가로 변경이 필요한 옵션이 있을 시 사용
- Nullable, 문자열 사이즈, 타입 등
Repostory 생성
- 보통 ibatis나 MyBatis 등에서 Dao라고 불리는 DB Layer 접근자
-> JPA에서는 Repository라고 부르며 인터페이스로 생성
-> JapRepository<Entity 클래스, PK 타입>를 상속하면 기본적인 CRUD 메소드가 자동 생성
-> @Repository 추가 할 필요없음
-> Entity 클래스와 기본 Entity Repository는 함께 위치 - .../domain/user