반응형
JPA 설정 및 테스트 코드 작성은 이전글에 작성하였습니다.
이번글에서 다루는 소스코드는 github에 있습니다.
JPA 저장 후 조회
@Test
void entity저장후조회() {
//given
final Long id = 1L;
final String storeName = "스토어1";
final String storeAddress = "주소1";
Store store = Store.builder()
.id(id)
.name(storeName)
.address(storeAddress)
.build();
storeRepository.save(store);
//when
Store resultStore = storeRepository.findByName(storeName);
//then
Assertions.assertEquals(resultStore.getName(), storeName);
}
- 저장
- Entity Store객체를 Builder를 통해 생성한다.
- storeRepository를 통해 저장한다.
- 조회
- storeRepository에서 name으로 조회
- 저장한 데이터와 조회된 데이터 비교한다.
Repository
Repository interface에 메소드를 생성할 수 있습니다.
- findBy{Column}({value})
select * from {entity} where {column} = {value}
- findBy{Column1}And{Column2}({value1}, {value2})
select * from {entity} where {column1} = {value1} and {column2} = {value2}
- findBy{Column1}And{Column2}({value1}, {value2})
select * from {entity} where {column1} = {value1} and {column2} = {value2}
수정
@Test
@DisplayName("초기 테스트 시 entity저장후조회 테스트 먼저 진행 후 테스트.")
void entity수정() {
//given
final Long id = 1L;
final String storeName = "스토어2";
final String storeAddress = "주소2";
Store store = Store.builder()
.id(id) // id 가 같으면 수정처리함
.name(storeName)
.address(storeAddress)
.build();
//when
Store udpateStore = storeRepository.save(store);
//then
Assertions.assertEquals(udpateStore.getName(), storeName);
}
Entity 저장 후 조회 응용
@Test
@DisplayName("Store, Staff entity 저장")
void entity저장() {
//given
final Long storeId = 2L;
final String storeName = "store1234";
final String storeAddress = "storeAddress";
final Long staffId = 1L;
final String staffName = "staff1234";
final Integer staffAge = 30;
Staff staff = Staff.builder()
.id(staffId)
.name(staffName)
.age(staffAge)
.build();
Store store = Store.builder()
.id(storeId)
.name(storeName)
.address(storeAddress)
.staff(Arrays.asList(staff))
.build();
//when
storeRepository.save(store);
Store resultStore = storeRepository.findByName(storeName);
//then
Assertions.assertEquals(resultStore.getName(), storeName);
Collection<Staff> staff1 = resultStore.getStaff();
Iterator<Staff> iterator = staff1.iterator();
Staff next = iterator.next();
Assertions.assertEquals(next.getName(), staffName);
}
- 저장
- 일 대 다 관계인 Store : Staff 의 데이터 저장 방법이다.
- Staff 객체를 생성 후 Store 객체에 넣어 생성 후 Repository를 이용하여 저장하면 Store, Staff 테이블에 데이터가 적재된다.
- 조회
- Store 데이터를 repository에서 조회한다.
- 결과값 Store에서 Staff값을 조회한다. result.getStaff()
- Entity에서 LAZY, EAGER 설정에 따라 조회해오는 방식이 다르다.
- LAZY : result.getStaff() 를 호출하는 순간 store에 매핑되는 staff 객체 리스트를 조회한다.
- EAGER : repository에서 store를 조회하는 순간 staff 객체 리스트까지 모두 조회한다.
- 상황에 맞게 설정해야하지만 전 LAZY를 많이 쓰는 편입니다. EAGER로 했을 때 필요하지 않는 객체 리스트를 얻어올 수 있기 때문에 비용 절약에서 LAZY를 씁니다.
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "store_id")
private Collection<Staff> staff;
다음 글에서는 QueryDsl을 적용해보겠습니다
반응형
'Develop > spring-data' 카테고리의 다른 글
Spring Data JPA 기반 Querydsl plugin 실행방법 (0) | 2020.11.07 |
---|---|
Spring Data JPA 기반 Querydsl 사용해보자. ( 설정편 ) (0) | 2020.11.07 |
Spring Data JPA 기반 Querydsl란? (0) | 2020.11.06 |
Spring Data JPA 시작 그리고 예제 (1) | 2020.11.05 |
Spring Data JPA란? (0) | 2020.11.05 |