스프링부트 라이브러리 구조
Spring-boot-starter-Web
- spring-boot-starter-tomcat
- spring-webmvc
spring-boot-starter-jdbc
- spring-boot-starter-aop
- spring-boot-starter-jdbc (HikariCp Connection Pool)
- spring-data-jpa
스프링 부트를 통한 이점
: 부트를 이용하지 않을 경우 persistence.xml 부터 시작하여 프로그래머가 설정해 주어야하는 부분들이 많으나 부트를 사용할 경우 이런 부분을 자동으로 설정 해 준다.
JPA 쿼리 파라미터 로그 남기기
1 | implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7' |
해당 라이브러리 사용하면 돼!
스프링 데이터 JPA에서 공통 인터페이스를 상속하면 어떻게 동작하는 것인가?
1 | public interface MemberRepository extends JpaRepository<Member, Long> { |
해당 코드를 보자.
extends JpaRepository<Member, Long> 부분이 있다.
해당 형태는 JpaRepository<엔티티, 엔티티의 key type> 으로 생각하면 된다.
이렇게 MeberRepository를 정의한 후 Service 계층에서 편히 주입받아서 사용하면 된다!!
이때 한가지 의문이 들것이다!! 현재 MemberRepository는 인터페이스고 구현체를 만들어주지 않았는데 어떻게 주입받아서 사용할 수 있는가??
이 질문의 답은 JPA가 해당 인터페이스를 본따서 프록시 객체를 만들어주고 이 프록시 객체를 주입받아 사용할 수 있게 되는 것이다!! (실제 클래스 타입을 찍어보면 proxy객체 확인가능)
공통인터페이스 구성
주요 메서드
제네릭 타입
- T : 엔티티
- ID : 엔티티의 식별자 타입
- S : 엔티티와 그 자식 타입
주요 메서드 종류
- save(S) : 새로운 엔티티 저장, 이미 있는 엔티티 병합
- delete(T) : 엔티티 하나를 삭제. (EntityManager.remove() 호출)
- findById(ID) : 엔티티 하나를 조회. (EntityManager.find() 호출)
- getOne(ID) : 엔티티를 프록시로 조회. (EntityManager.getReference() 호출)
- findAll(…) : 모든 엔티티를 조회. 정렬(Sort)나 페이징(Pageable) 조건을 파라미터로 제공할 수 있어