스프링 데이터 Common | Repository CrudRepository PagingAndSortingRepository |
스프링 데이터 JPA | JpaRepository -> PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> |
CrudRepository | PagingAndSortingRepository -> CrudRepository <S extends T> S save(S var1); <S extends T> Iterable<S> saveAll(Iterable<S> var1); Optional<T> findById(ID var1); boolean existsById(ID var1); Iterable<T> findAll(); Iterable<T> findAllById(Iterable<ID> var1); long count(); void deleteById(ID var1); void delete(T var1); void deleteAll(Iterable<? extends T> var1); void deleteAll(); |
@Rollback(false) | 롤백안함 트렌젝션 + 테스트 --> 하이버네이트가 롤백할 커리여서 테스트에서 insert 안나라감. |
PagingAndSortingRepository | public interface Page<T> extends Slice<T> { static <T> Page<T> empty() { return empty(Pageable.unpaged()); } static <T> Page<T> empty(Pageable pageable) { return new PageImpl(Collections.emptyList(), pageable, 0L); } int getTotalPages(); long getTotalElements(); <U> Page<U> map(Function<? super T, ? extends U> var1); } |
테스트용 h2 DB설정 | 1. h2 test 추가. <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>test</scope> </dependency> 2. @DataJpaTest 추가. @ExtendWith(SpringExtension.class) @DataJpaTest class DiaryRepositoryTest { |
Repository 인터페이스 정의 | 특정레포지터리 제작 @RepositoryDefinition(domainClass = Study.class, idClass = Integer.class) public interface PersonalRepository { Study save(Study study); List<Study> findAll(); } |
@NoRepositoryBean | @NoRepositoryBean > 레퍼지토리아님. 상속받아 사용. public interface MyRepository<T, ID extends Serializable> extends Repository<T, ID> { <E extends T> E save(E entity); List<T> findAll(); } |
Null 처리 | 리턴값 1개일떄 java 8 Optional <E extends T> Optional<E> findByID(ID id); spring 5 @NonNullApi, @NonNull, @Nullable. @Nullable <E extends T> E save(E entity); 런타임 체크 지원 함. JSR 305 애노테이션을 메타 애노테이션으로 가지고 있음. (IDE 및 빌드 툴 지원) 인텔리제이 : Build, Execution, Deployment > Compiler > Add runtime assertion for notnull-annotated methods and parameters > Configure annotations 클릭 > 위에박스 + nullable 스프링추가, 아랫박스 NoneNull 추가 ![]() >> 반영 ![]() @NonNullApi package com.today10sec.diary.repository;; |
Optional | 단일값 받을 때 추천. .. 최근추세 == null 안씀... Optional<Diary> byId= diaryRepository.findById(100); assertThat(byId).isEmpty(); List의 경우 스프링데이터에서 빈 컬렉션이 나옴 isEmpty(); 체크만. |
쿼리 만들기 개요. |
Paging and sorting repository , crudRepository
더보기
package com.today10sec.diary.repository;
import com.today10sec.diary.model.Diary;
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.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@ExtendWith(SpringExtension.class)
@DataJpaTest
class DiaryRepositoryTest {
@Autowired
DiaryRepository diaryRepository;
@Test
@Rollback(false)
public void crud_Repository(){
//Given
Diary diary = new Diary();
diary.setName("aaaaa");
assertThat(diary.getId()).isNull();
//when
Diary newDiary = diaryRepository.save(diary);
//then
assertThat(newDiary.getId()).isNotNull();
//when
List<Diary> diaries = diaryRepository.findAll(); //이것만 JPA REpository
//then
assertThat(diaries.size()).isEqualTo(1);
assertThat(diaries).contains(newDiary);
}
@Test
@Rollback(false)
public void PagingAndSorting_Repository(){
//Given
Diary diary = new Diary();
diary.setName("aaaaa");
Diary newDiary = diaryRepository.save(diary);
//when
Page<Diary> page =diaryRepository.findAll(PageRequest.of(0, 10));
//then
assertThat(page.getTotalElements()).isEqualTo(1);
assertThat(page.getNumber()).isEqualTo(0);
assertThat(page.getSize()).isEqualTo(10);
assertThat(page.getNumberOfElements()).isEqualTo(1);
//when
page = diaryRepository.findByNameContains("aaaaa", PageRequest.of(0,10));
//then
assertThat(page.getTotalElements()).isEqualTo(1);
assertThat(page.getNumber()).isEqualTo(0);
assertThat(page.getSize()).isEqualTo(10);
assertThat(page.getNumberOfElements()).isEqualTo(1);
}
}
'JAVA > spring' 카테고리의 다른 글
Runner 구현 (0) | 2021.05.03 |
---|---|
[1028 from 스프링 백기선 JPA] 스프링데이터 Common _ 쿼리, 비동기, 도메인, QueryDSL (추후 추가. ) (0) | 2021.05.03 |
[1028 from 스프링 백기선 JPA] 스프링데이터 _ JPA 원리, 스프링데이터 모듈 (0) | 2021.05.03 |
[1028 from 스프링 백기선 JPA]Hibernate _ 엔티티, Cascade, Fetch, Query FROM EntityManager (0) | 2021.04.30 |
스프링 목차 (0) | 2021.04.29 |