일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- @IdClass
- 인텔리제이
- 빈생성안됨
- uncheck Exception
- JoinColumn
- json
- queryDSL
- 스프링 부트 기능
- Filter
- Error creating bean with name
- JPA주의사항
- REST란
- REST API 규칙
- spring서버
- 복합키
- Spring Spring boot 차이
- jwt메서드
- jpa에러
- git
- jpa회원가입
- 1차캐시
- ERD 작성
- JPA
- 최종 프로젝트
- Unsatisfied dependency
- github
- 스프링부트오류
- json gson 차이
- 스프링 부트 공식 문서
- Q 클래스
- Today
- Total
Everyday Dev System
SimpleJpaRepostory 내부 뜯어보기 본문
1. Spring Data JPA
- JPA를 쓰기 편하게 만들어놓은 모듈이다.
→ 위와 같이 Repository 인터페이스가 Spring Data JPA 내부에 존재한다.
위와 같이 JpaRepository는 ListCrudRepository를 상속하고,
ListCrudRepository는 CrudRepository를 상속하고,
CrudRepository는 Repository를 상속한다.
상속 관계 : Repository > CrudRepository > ListCrudRepository > JpaRepository
예를 들어, Repository 인터페이스의 기본 구현체인 SimpleJpaRepository의 코드를 보자.
SimpleJpaRepository는 JpaRepositoryImplementation를 상속하고,
JpaRepositoryImplementation는 JpaRepository를 상속한다.
아래와 같이 내부적으로 EntityManager을 사용하고 있는 것을 볼 수 있다.
CrudRepository 인터페이스 내에 선언되어 있는 save(), delete(), findById() 등을
SimpleJpaRepository에서 구현하여 사용할 수 있는 것이다.
또한,
Repository 인터페이스를 구현한 구현체인 SimpleJpaRepository 내에 @Repostiory
어노테이션이 달려있기 때문에 스프링 내부에 Bean으로 수동 등록된다.
그렇기 때문에 JpaRepository를 상속하여 구현한 PostRepository를
빈으로 자동 등록되고, 이를 통해 위에 메서드들을 사용할 수 있다.
JpaRepository나 CrudRepository가 아닌 Repository를 상속해서 더 깔끔한 시스템 설계를 만들 수 있다.
reference :
https://jaehoney.tistory.com/250
'나의 호기심' 카테고리의 다른 글
QueryDSL에서 Q 클래스는 어디에 위치해있을까? (0) | 2023.08.01 |
---|---|
AWS의 ELB, ALB, CLB, NLB 란? (0) | 2023.07.28 |
JPA의 엔티티는 왜 기본 생성자가 있어야 할까? (0) | 2023.07.18 |
HttpHeaders는 MultiValueMap의 구현체이다? (0) | 2023.07.11 |
스프링 부트에서 MockMvc를 사용하여 HTTP API 테스트하기 (0) | 2023.07.10 |