Helmi

Repository 설계하기 본문

SpringBoot

Repository 설계하기

Helmi 2023. 3. 14. 16:23

ItemRepository 인터페이스 만들기

com.shop.repository 패키지에 ItemRepository 인터페이스 만들기

 

package com.shop.repository;

import com.shop.entity.Item;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ItemRepository extends JpaRepository<Item, Long>{

}

JpaRepository를 상속받음. 이는 2개의 제네릭 타입을 사용.

1) 엔티티 타입 클래스

2) 기본키 타입

 

JpaRepository는 기본적인 CRUD 및 페이징 처리위한 메소드 정의되어 있음.

메소드 기능
<S extends T> save(S entity) 엔티티 저장 및 수정
void delete(T entity)0 엔티티 삭제
count() 엔티티 총 개수 반환
Iterable<T> findAll() 모든 엔티티 조회

 

테스트 파일 설정

로직이 복잡할 경우 코드 수정 후 버그없이 제대로 동작하는지 테스트하는 것이 매우 중요.

잘 만들어진 테스트 케이스는 유지보수 및 소스코드의 안정성을 위해 중요.

테스트 환경의 경우 h2 데이터베이스 사용하도록 resources 아래 application-test.properties 사용해줄 것.

 

(H2 데이터베이스 : 메모리에 데이터 저장하는 인메모리 데이터베이스 기능 제공. 애플리케이션 종료되면 데이터베이스에 저장된 데이터 삭제됨. 가볍고 빨라 개발할 때 테스트용 데이터베이스로 많이 사용함.)

# Datasource설정
spring.datasource.driver-class.name=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:test
spring.datasource.username=sa
spring.datasource.password=

#H2 테이터베이스 방언 설정
spring.jpa.datanase-platform=org.hibernate.dialect.H2Dialect

 

테스트 코드 작성

package com.shop.repository;

import com.shop.constant.ItemSellStatus;
import com.shop.entity.Item;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.TestPropertySource;

	@SpringBootTest
	@TestPropertySource(locations="classpath:application-test.properties")
	class ItemRepositoryTests {

	@Autowired
	ItemRepository itemRepository;

	@Test
	@DisplayName("상품 저장 테스트")
	public void createItemTests() {
    
		Item item = new Item();
        
		item.setItemNm("테스트 상품");
		item.setPrice(10000);
		item.setItemDetail("테스트 상품 상세 설명");
		item.setItemSellStatus(ItemSellStatus.SELL);
		item.setStockNumber(100);
		item.setRegTime(LocalDateTime.now());
		item.setUpdateTime(LocalDateTime.now());
		itemRepository.save(item);

		System.err.println(savedItem.toString());
	}
}

- ItemRepository 사용 위해 @Autowired 이용해 Bean 주입

- @Test : 테스트 할 메소드 위에 선언, 해당 메소드를 테스트 대상으로 지정

- Junit5에 추가된 어노테이션으로 테스트 코드 실행 시 @DisplayName에 지정한 테스트명 노출 됨.

 

Ctrl + Shift + F10 : 실행 단축기

 

ItemRepository 인터페이스를 작성한 것만으로 상품 테이블에 데이터 insert 가능.

(Spring DataJPA는 인터페이스 작성시 런타임 시점에 자바의 Dynamic Proxy 이용해 객체를 동적으로 생성해주므로)

'SpringBoot' 카테고리의 다른 글

쿼리 메소드 -2  (0) 2023.03.17
쿼리 메소드 - 1  (0) 2023.03.14
Entity 매핑 관련 어노테이션  (0) 2023.03.13
상품 엔티티 설계  (0) 2023.03.13
쇼핑몰 프로젝트 생성  (0) 2023.03.12