JPA

스프링 데이터 JPA 소개

ppirae 2022. 7. 15. 00:31

그동안 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