본문 바로가기
JPA

스프링 데이터 JPA 소개

by ppirae 2022. 7. 15.

그동안 JPA CRUD를 직접 작성하였다.

 

그런데 스프링 데이터 JPA를 이용하면 

가장 기본적인 CRUD - save, delete, find, findAll, count 등 (그 이외에도 정말 많은)

다양한 기능들이 구현되있는 인터페이스를 상속받아 사용할 수 있다.

 

직접 사용해보았는데 신세계다.

@Repository
public class MemberJpaRepository {

    @PersistenceContext
    private EntityManager em;

    public Member save(Member member) {
        em.persist(member);
        return member;
    }

    public void delete(Member member) {
        em.remove(member);
    }

    public Member find(Long id) {
        return em.find(Member.class, id);
    }

직접 구현한  JPA CRUD 중 일부이다.


public interface MemberRepository extends JpaRepository<Member, Long> {

    List<Member> findByUsernameAndAgeGreaterThan(String username, int age);
}

아래는 스프링 데이터 JPA의 인터페이스이고 JPARepository를 extends 하였는데

이 안에 이미 수많은 구현체들이 존재하고 그 안의 CRUD 기능을 사용만 하면 된다.


또한 함수이름만 설정하면 그대로 쿼리를 만드는 마법같은 기능을 써준다.

쿼리 메소드라는 기능은 메소드 이름으로 쿼리 생성이 가능하다.

참고사이트

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/

 

Spring Data JPA - Reference Documentation

Example 109. Using @Transactional at query methods @Transactional(readOnly = true) interface UserRepository extends JpaRepository { List findByLastname(String lastname); @Modifying @Transactional @Query("delete from User u where u.active = false") void del

docs.spring.io

 

쿼리 메소드 기능 3가지

  • 메소드 이름으로 쿼리 생성 -> (아주 간단한 메소드만 사용)
  • 메소드 이름으로 JPA NamedQuery 호출  -> (실무에서 사용할일 거의 없음)
  • @Query 어노테이션을 사용해서 리파지토리 인터페이스에 쿼리 직접 정의

 

다음글에 쓰겠음.


인프런 김영한님의 스프링 데이터 JPA를 듣고 작성한 글입니다.

https://inf.run/Jt9q

 

실전! 스프링 데이터 JPA - 인프런 | 강의

스프링 데이터 JPA는 기존의 한계를 넘어 마치 마법처럼 리포지토리에 구현 클래스 없이 인터페이스만으로 개발을 완료할 수 있습니다. 그리고 반복 개발해온 기본 CRUD 기능도 모두 제공합니다.

www.inflearn.com

 

'JPA' 카테고리의 다른 글

Querydsl 소개  (0) 2022.07.19
API 개발 고급 - 지연 로딩과 조회 성능 최적화  (0) 2022.07.10
프록시와 연관관계 (즉시로딩, 지연로딩)  (0) 2022.07.02
상속관계 매핑  (0) 2022.06.29
다양한 연관관계 매핑  (0) 2022.05.16

댓글