커스텀 리파지토리 만들기 질문 입니다.
277
작성한 질문수 14
안녕 하세요 계속 질문을 드리게 되네요.
코딩 하시는거 보니, 저는 지금까지 프로그래머도 아니고 그냥 코더 였네요.
스프링 데이터 Common 7. 커스텀 리포지토리 만들기 Chatper 보고 드리는 질문 입니다.
강의에 아래와 같이 나옵니다.
1. PostCustomRepository 란 Interface 만든다.
해당 Interface는 findMyPost()란 추상 메소드를 가진다
2. PostCustomRepository 를 구현한 PostCustomRepositoryImpl 에 findMyPost() 메소드를 구현 한다.
3. 사용할 PostRepository Interface 에 implement를 하나 더 추가 한다.
public interface PostRepository extends JpaRepository<Post, Long>, PostCustomRepository {
}
4. Test source 에서 @Autowired 로 PostRepository 를 DI 하고 findMyPost() 를 호출 한다.
여기부터 질문 입니다.
제가 debug를 걸어서 postRepository (변수) 를 보니 해당 Interface는 실제 SimpleJpaRepository 객체 더군요.
그럼 postRepository 객체가 DI 되서 생기는 일을 해주는 Spring Frameowork이 기존 SimpleJpaReposity class로
객체 생성시, custom으로 추가한 findMyPost() 를 class에 추가 한후 객체 만들어서 postRepository(변수)에
attach해주는 건가요?
즉. 아래와 같은 건가요?
PostRepository postRepository = new SimpleJpaRepositoy() <- findMyPost()가 추가되어 생성된 객체
답변 2
1
코드로 보여주신 PostRepositoryImpl 에 해당하는 객체를 동적으로 스프링 데이터 JPA가 SimpleJpaRepository를 사용해서 생성을 해주기 때문에 그 타입인거에요. 커스텀 인터페이스와 그 구현 내용은 직접 제공하고 있고 JpaRepository 인터페이스의 구현은 스프링 데이터 JPA가 SimpleJpaRepository에 구현해 두었으니 그걸 가지고 동적으로 객체를 생성해 빈으로 등록해주고 우린 그걸 스프링 DI를 사용해서 주입 받아 사용하고 있는 겁니다.
0
제가
여전히 어떻게 위 질문의 캡처에 노란색 동그라마 객체가 SimpleJpaRepository 객체로 만들어 진건지 이해는 안되지만
Interface 관련 자료를 google 하고 조금이나마 깨달음을 얻었네요.
ctr+c,v 만 하다 보니 Interface에 대한 지식이 없었습니다.
제가 Interface 관련 자료 구글링 하고 깨달은걸로 짜놓은 샘플 Source를 첨부 했습니다.(파일첨부가 안되
소스를 붙였습니다.)
제가 코딩한 소스와 같은 컨셉으로 아마도 Spring 내에서 구현 되어 있어서, custom으로 추가된 findMyPost()가 사용 가능 한 거겠죠.
package com;
public interface JpaRepository {
public void findAll();
public void select();
public void delete();
}
=================================================
package com;
public class SimpleJpaRepository implements JpaRepository {
@Override
public void findAll() {
System.out.println("findAll.........");
}
@Override
public void select() {
System.out.println("select........");
}
@Override
public void delete() {
System.out.println("delete........");
}
}
=================================================
package com;
public interface MyInterface {
public void myMethod();
}
=================================================
package com;
public class MyInterfaceImpl implements MyInterface {
@Override
public void myMethod() {
System.out.println(" myMethod() 구현 함" );
}
}
=================================================
package com;
public interface PostRepository extends JpaRepository, MyInterface {
}
=================================================
package com;
public class PostRepositoryImpl implements PostRepository{
@Override
public void findAll() {
JpaRepository obj = new SimpleJpaRepository();
obj.findAll();
}
@Override
public void select() {
JpaRepository obj = new SimpleJpaRepository();
obj.select();
}
@Override
public void delete() {
JpaRepository obj = new SimpleJpaRepository();
obj.delete();
}
@Override
public void myMethod() {
MyInterface obj = new MyInterfaceImpl();
obj.myMethod();
}
}
=================================================
package com;
public class TestMain {
public static void main(String[] args) {
TestMain t = new TestMain();
t.go();
}
private void go() {
PostRepositoryImpl posRepositoryImpl = new PostRepositoryImpl();
PostRepository p = posRepositoryImpl;
System.out.println("================");
p.findAll();
p.select();
p.delete();
p.myMethod();
}
}
spring boot 2.7.13-SNAPSHOT trace 소문자 로그 안나옴
0
532
1
<스프링 데이터 Common: 기본 리포지토리 커스터마이징> 에 대한 질문
0
392
1
comment table에서 저장될떄 왜 id값이 2부터저장이되는건가요?
0
407
1
@EnableJpaRepositories 설정을 스프링부트가 어디에서 자동설정하나요?
0
450
0
PersistenceContext 관련 질문드립니다.
0
335
1
지금(Eager), 나중에(Lazy)의 의미를 모르겠습니다
0
338
1
transaction 구간이 길어질 경우의 처리방법 문의드립니다.
0
905
1
docker postgres
0
292
1
Multiple DataSource 사용 시 transaction 관련 질문 드립니다.
0
2908
1
entity 중 null이 아닌 필드만 update 할 방법이 있을까요?
0
1190
1
Eager 모드일 경우, join을 inner join으로 바꾸는 법이 있을까요?
0
385
1
엔티티를 상속받는 DTO가 일반적인가요?
1
1847
1
커스텀 타입 클래스를 String 타입 처럼 이용해 쿼리하는 방법에 대해 질문하고 싶습니다.
0
339
1
연관관계 매핑 어떤식으로 해야될지 감이 안잡힙니다.
0
566
4
EntityManager 주입시 Annotation관련 질문드립니다.
0
565
1
클래스 기반 프로젝션 사용 관련 질문
0
560
1
save 메서드 질문드립니다.
0
258
1
복잡한 통계쿼리도 JPA로 가능한가요?
2
5592
1
find 와 get의 차이가 무엇인가요?
0
890
1
실무에서 JPA 할 때 FK로 개발할때 연관관계를 꼭 맺어주어야 하나요?
0
998
1
\dt Did not find any relations.
0
481
1
소스코드는 어디서 볼 수 있을까요?
1
287
1
table 생성과 select 문에 대한 질문
0
174
1
스프링 데이터 RepositoryTest 관련 질문
0
2173
2





