[04] Repository 설계

Veloger·2022년 12월 11일
0

ShopWeb_Project

목록 보기
4/7
  • EntityManager를 이용해 엔티티 저장하지 않고, Spring Data JPA에선 EntityManager를 직접 설정하지 않아도 된다.
  • 그대신 DAO(Data Access Object)의 역할을 하는 Repository 인터페이스를 설계한 후 사용하면 된다.

-> com.shop.repository.ItemRepository.java

public interface ItemRepository extends JpaRepository<Item, Long> { }
  • JPARepository는 CRUD 및 페이징 처리를 위한 메소드를 제공.
메소드기능
<S extends T> save(S entity)엔티티 저장 및 수정
void delete(T entity)엔티티 삭제
count()엔티티 총 개수 반환
Iterable<T>모든 엔티티 조회

h2DBMS를 이용해서 테스트 코드를 작성해보자.
테스트 코드용 프로퍼티 파일을 만들어 준다.

-> application-test.properties

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

# H2 DB 방언 설정
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

직접적인 테스트 코드를 만든다.

-> com.shop.repository.ItemRepositoryTest.java

@SpringBootTest // 실제 애플리케이션 구동 할 때처럼 모든 빈을 IoC 컨테이너에 등록
@TestPropertySource(locations="classpath:application-test.properties") // 기본 프로퍼티보다 우선적으로 설정하게 함
class ItemRepositoryTest {

    @Autowired
    ItemRepository itemRepository;

    @Test
    @DisplayName("상품 저장 테스트")
    public void createItemTest(){
        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());
        Item savedItem = itemRepository.save(item);
        System.out.println(savedItem.toString());
    }

실행 결과

  • Spring Data JPA는 인터페이스만 작성하면 런타임 시점에 자바의 Dynamic Proxy를 이용해서 객체를 동적으로 생성해줌.
  • 따라서 DAO와 xml에 쿼리를 작성하지 않아도 된다.

0개의 댓글

관련 채용 정보