- JPA란
- ORM(Object-Relational-Mapping) 스펙으로 자바 객체와 관계형 DB간의 매핑 처리를 위한 API
- Java Persistence API(2.2버전)
- Jakarta Persistence API(3.0버전)
- 2.2 버전부터 (JCP → 이클립스 재단)으로 이관 진행
- Jakarta EE 9 버전(JPA 3.0)
- 보통 JPA만 단독으로 사용하기 보다는 스프링과 함께 사용
- 스프링 6버전부터 Jakarta EE 9+ 지원
- JPA 특징
- 어노테이션을 통해 매핑 설정을 하며 XML 파일을 통해서 매핑 설정도 가능함
- String, int, LocalData 등 기본적인 타입에 대한 매핑도 지원
- 커스텀 타입 변환기 지원 → 내가 만든 Money 타입을 DB 컬럼에 매핑 가능
- 밸류 타입 매핑 지원 → 한 개 이상 컬럼을 한 개 타입으로 매핑 가능
- 클래스 간 연관 지원 → 1:1, 1:N, N:1, N:M
- 상속에 대한 매핑도 지원
- JPA Repository 컨벤션
- method
save(): 레코드 저장(insert, update)
findOne(): primary key로 레코드 한 건 찾기
findAll(): 전체 레코드 불러오기 정렬, 페이징 가능
count(): 레코드 개수
delete(): 레코드 삭제
- keyword
and(여러 필드 and로 검색) → findOneByEmailAndUserId(String email, String userId);
or(여러 필드 or로 검색) → findOneByEmailOrUserId(String email, String userId);
between(두 필드 사이값 검색) → findAllByCreateDateBetween(Date frommDate, Date toDate);
lessthan(작은 항목 검색) → findAllAgeLessThan(int age);
greaterThanEqual(크거나 같은 항목 검색) → findAllAgeGreaterThanEqual(int age);
like(like 검색) → findAllNameLike(String ‘Kim%’);
isNull(null인 항목 검색) → findAllNameIsNull();
in(여러 값 중의 하나) → findAllName(String…names);
orderBy(정렬) → findAllEmailOrderByNameAsc(String email);
@GeneratedValue
@EntityListener
@MappedSuperClass
config
JPA Auditing
Spring Data JPA, JPA
query dsl(spring boot 3.0)
JPQL
영속성 컨텍스트
JPA 주인 객체와 편의 메서드 설계
JPA 프록시와 Spring Data JPA 동작
연관관계 매핑
영속성 컨텍스트와 1차 캐시
영속성 전이와 고아 객체 제거
지연 로딩의 최적화 전략
FULLTEXT INDEX WITH JPA