본문 바로가기

웹/Spring

[메모] Spring 입문(2)

 - 스프링 DB - 

  • @SpringBootTest DB연동 config를 Spring이 들고 있기 때문에 테스팅 진행에 있어 스프링 컨테이너와 테스트를 함께 실행할 수 있게 해줌
  • DB연동 이후 Testing 진행 시 @Transaction 적용하면 DB에 실제 데이터 반영 없이(다음 테스트에 영향 없이) 테스팅 진행 가능 (@AfterEach, BeforeEach 사용 불필요)


  • JPA 스프링 Repository 관련 예제 코드
package winterlimited.hellospring.repository;

import jakarta.persistence.EntityManager;
import jakarta.persistence.TypedQuery;
import winterlimited.hellospring.domain.Member;

import java.util.List;
import java.util.Optional;

public class JpaMemberRepository implements MemberRepository {

// EntityManger DI
    private final EntityManager em;
    
    public JpaMemberRepository(EntityManager em) {
        this.em = em;
    }
    
    @Override
    public Member save(Member member) {
    // insert
        em.persist(member);
        return member;
    }

    @Override
    public Optional<Member> findById(Long id) {
    // select
        Member member = em.find(Member.class, id);
        return Optional.ofNullable(member);
    }

    @Override
    public Optional<Member> findByName(String name) {
        List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class)
                .setParameter("name", name)
                .getResultList();

        return result.stream().findAny();
    }

    @Override
    public List<Member> findAll() {
    // m 객체를 대상으로 query를 보냄
        return em.createQuery("select m from Member m", Member.class)
                .getResultList();
    }
}

 - 스프링 데이터 JPA - 

  • JPA를 사용하기 편리하게 해주기 위해 제공되는 라이브러리
  • 기본적으로 Interface에서 다양한 기능들을 처리할 수 있고 정해진 규칙에 따라 기본적인 CRUD 제공
  • ex) findByName -> JPQL select m from Member m where m.name = ?