스프링 부트로 구현하는 웹서비스 - 5 Entity

Bumgu·2023년 7월 15일
0
import org.springframework.data.jpa.repository.JpaRepository;  
  
public interface PostsRepository extends JpaRepository<Posts, Long> {  
  
}

Mybatis등에서 Dao라고 불리는 DB Layer접근자.
JPA 에서는 Repositry라고 불리며 인터페이스로 생성함.
인터페이스를 생성 후, JpaRepository<Entity 클래스, PK타입> 을 상속하면 기본적인 CRUD메소드가 자동으로 생성됨.

Entity클래스와 기본 Entity Repository는 함께 위치해야함.

둘은 아주 밀접한 관계이고, Entity클래스는 기본 repostitory 없이는 제대로 역할을 할 수가 없음.


PostRepositoryTest

package com.kelly.springbootkelly.domain.posts;

import org.aspectj.lang.annotation.After;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;

import java.time.LocalDateTime;
import java.util.List;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;

@ExtendWith(SpringExtension.class)
@SpringBootTest
public class PostsRepositoryTest {

    @Autowired
    PostsRepository postsRepository;

    @After("")
    public void cleanUp() {
        postsRepository.deleteAll();
    }

    @Test
    public void 게시글저장_불러오기() {
        //given
        String title = "Test Title";
        String content = "Test Content";

        postsRepository.save(Posts.builder()
                .title(title)
                .content(content)
                .author("flrhyme9@gmail.com")
                .build()
        );

        //when
        List<Posts> postsList = postsRepository.findAll();

        //then
        Posts posts = postsList.get(0);
        assertThat(posts.getTitle()).isEqualTo(title);
        assertThat(posts.getContent()).isEqualTo(content);

    }

After

  • Junit 에서 단위 테스트가 끝날 때마다 수행되는 메소드를 지정
  • 보통은 배포 전 전체 테스트를 수행할 때 테스트간 데이터 침범을 막기위해 사용함.
  • 여러 테스트가 동시에 수행되면 테스트용 데이터베이스인 h2에 데이터가 그대로 남아있어 다음 테스트 실행 시 테스트가 실패할 수 있습니다.

postsRepository.save

  • 테이블 posts에 insert/update 쿼리를 실행합니다.
  • id 값이 있다면 update가, 없다면 insert 쿼리가 실행됨.

postsRepository.findAll

  • 테이블 posts에 있는 모든데이터를 조회해오는 메소드.
profile
Software VS Me

0개의 댓글