Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 리소스 서버
- webjar
- 스프링부트
- 알고리즘
- HttpMessageConverters
- 백트래킹
- 리소스핸들러
- Application Event
- 다익스트라
- Application Argument
- 백준
- 외부설정
- Spring Security
- 백기선
- @ConfigurationProperties
- OAuth2
- cors
- @Profile
- JPA
- EnableAutoConfiguration
- WebApplication Type
- 스프링 부트
- rest api
- 정적 리소스
- application.properties
- HATEOAS
- JsonSerializer
- Application Runner
- 브루트포스
- AuthenticationPrincipal
Archives
- Today
- Total
아카이브
[스프링 데이터 JPA] 스프링 데이터 Common 1.레포지토리 (테스트) 본문
스프링 데이터 Common
- Repository: 단순 Marker용 Interface로 Repository 용도로 쓰일 것을 암시하는 것.
- CrudRepository: 기본적인 CRUD 기능들을 제공.
- PagingAndSortingRepository : Sort, Pageable findAll 메서드 제공
@NoRepositoryBean
spring data가 runtime시 bean을 이 어노테이션이 기입된 bean을 등록하지 않도록 방지하는 것
PostRepository에 사용자 메서드 추가
/**
* JPA의 기본적인 동작 원리와 빈 등록
*
* @Repository가 없어도 Bean으로 등록해 줌
* @EnableJpaRepositories 여기서부터 시작한다
* EnableJpaRepositories 안에 @Import(JpaRepositoriesRegistrar.class)로 시작해서
* RepositoryBeanDefinitionRegistrarSupport 이 implements ImportBeanDefinitionRegistrar(핵심) 하고
* @Override registerBeanDefinitions() method
*/
public interface PostRepository extends JpaRepository<Post, Long> {
Page<Post> findByTitleContains(String title, Pageable pageable);
long countByTitleContains(String title);
}
JPA 슬라이싱 테스트 코드
@DataJpaTest// slicing test using h2 database
class PostRepositoryTest {
@Autowired
PostRepository postRepository;
@Test
@Rollback(false) // @DataJpaTest의 @Transactional은 기본적으로 Rollback을 시킨다. 그러면 쿼리를 볼 수 없으니, Rollback=false로 설정한다.
public void crudRepositoryTest() {
//Given
Post post = new Post();
post.setTitle("hello spring boot common");
//When
assertThat(post.getId()).isNull(); // Transient status
Post save = postRepository.save(post);
//Then
assertThat(save.getId()).isNotNull();
//When
List<Post> all = postRepository.findAll();
//Then
assertThat(all.size()).isEqualTo(1);
assertThat(all).contains(save);
//When
Page<Post> postPage = postRepository.findAll(PageRequest.of(0, 10));
//Then
assertThat(postPage.getTotalElements()).isEqualTo(1);
assertThat(postPage.getNumber()).isEqualTo(0);
assertThat(postPage.getSize()).isEqualTo(10);
assertThat(postPage.getNumberOfElements()).isEqualTo(1);
//When
Page<Post> titleContains = postRepository.findByTitleContains("spring", PageRequest.of(0, 10));
//Then
assertThat(titleContains.getTotalElements()).isEqualTo(1);
assertThat(titleContains.getNumber()).isEqualTo(0);
assertThat(titleContains.getSize()).isEqualTo(10);
assertThat(titleContains.getNumberOfElements()).isEqualTo(1);
//When
long countByTitleContains = postRepository.countByTitleContains("spring");
//Then
assertThat(countByTitleContains).isEqualTo(1);
}
}
'Spring > 스프링 데이터 JPA' 카테고리의 다른 글
[스프링 데이터 JPA] 스프링 데이터 Common 3. Null 처리하기 (0) | 2021.01.16 |
---|---|
[스프링 데이터 JPA] 스프링 데이터 Common 2. 인터페이스 정의하기 (0) | 2021.01.16 |
[스프링 데이터 JPA] 스프링 데이터 JPA 소개 및 원리 (0) | 2021.01.10 |
[스프링 데이터 JPA] JPA 프로그래밍 7: Query (0) | 2021.01.10 |
[스프링 데이터 JPA] JPA 프로그래밍 6: Fetch (0) | 2021.01.10 |