[JPA] 커스텀 레포지토리 만들기

윤재열·2022년 5월 12일
0

JPA

목록 보기
14/21
post-custom-banner

쿼리 메서드로 해결이 되지 않은 경우 직접 코딩으로 구현이 가능합니다

  • 예를 들어 Post 라는 엔티티클래스가 있다고 가정해봅니다.
@Entity @Getter @Setter
public class Post{
	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String title;
    
    @Lob
    private String content;
    
    @Temporal(TemporalType.TIMESTAMP)
    private Date date;
}
  • 기본적으로 JpaRepository를 상속받은 인터페이스를 생성해줍니다.
public interface PostRepository extends JpaRepository<Post,Long>{
}
  • 커스텀 레포지토리도 인터페이스로 생성해줍니다.
public interface PostCustoRepository{

	List<Post> findMyPost();
}    
  • 이 커스텀 레포지토리에 대한 구현체를 만들어줍니다.
@Repository
@Transactional
public class PostCustomRepositoryImpl implements PostCustomRepository{

    @Autowired
    EntityManager entityManager;

    @Override
    public List<Postarg> findMyPost() {
        System.out.println("custom findMyPost");
        return entityManager.createQuery("SELECT p FROM Postarg AS p ",Postarg.class).getResultList();
    }
}
  • 그리고 PostRepository 인터페이스에 만든 PostCustomRepository를 상속시켜줍니다.
public interface PostRepository extends JpaRepository<Post,Long> ,PostCustomRepository{

}
  • 테스트를 만들어주어 잘 되는지 확인해 봅니다.
@SpringBootTest
class PostRepositoryTest{

	@Autowired
    private PostRepository postRepository;
    
    @Test
    void crud(){
    	
        postRepository.findMyPost();
        }
}        

  • 잘 되는 것을 볼 수 있습니다.
  • 이렇게 기능을 추가하는 방법입니다.
  • 스프링 데이터 레포지토리 기본 기능 덮어쓰기도 가능합니다.
  • 기본구현체가 마음에 들지 않을때 이렇게 CustomRepository를 만들고 새로 덮어쓰기가 가능합니다.

  • 예를 들어 이런 SimpleJpaRepository의 delete를 다르게 바꾸고 싶다면 이렇게 바꾸면 됩니다.
public interface PostCustomRepository {

    List<Postarg> findMyPost();

     void delete(T entity);
}
profile
블로그 이전합니다! https://jyyoun1022.tistory.com/
post-custom-banner

0개의 댓글