개발자의 오르막
스프링데이터 JPA 기본 개념과 메소드 기능 확인 본문
# 스프링데이터 Reference
- https://spring.io/projects/spring-data
# 스프링 데이터 구성
- 스프링 데이터 : SQL & NoSQL 저장소 지원 프로젝트의 묶음을 의미
- 스프링 데이터 common : 여러 저장소 지원 프로젝트의 공통 기능 제공
(Repository, Bean 등의 공통 기능 제공)
- 스프링 데이터 REST : 저장소의 데이터를 하이퍼 미디어 기반 HTTP 리소스로(REST API)로
제공하는 프로젝트
- 스프링 데이터 JPA : 스프링데이터 Common 이 제공하는 기능에 JPA 관련 기능 추가
# 스프링 데이터 Common
- JPA 프로젝트를 구성할 때, 우리는 Custom Repository를 인터페이스로 생성한다.
- Custom Repository는 JpaRepository를 상속받는다.
- JpaRepository는 PagingAndSortingRepository를 상속받는다.
- PagingAndSotringRepository는 CrudRepository를 상속받는다.
주로 페이징과 Sort 의 메소드를 갖고 있다.
- CrudRepository는 Repository를 상속받는다. 이때 Repository는 마커 인터페이스로
실질적 기능은 하지 않는다.
CrudRepository에서 데이터의 Crud에 전반적으로 사용하는 메소드를 갖고있다.
* 어노테이션
- @NoRepositoryBean : 실제 빈을 등록하지 않도록 방지하는 어노테이션
중간 단계의 Repository 는 모두 이 어노테이션이 등록되어 있다.
# h2 데이터베이스 환경 추가하기
- 우선, 각각의 레파지토리의 메소드를 시험해보기 전에 실제 DB에 운용되면
번거로워지기 때문에 h2데이터베이스를 활용한 Test 클래스를 작성한다.
# 실습하기
@RunWith(SpringRunner.class)
@DataJpaTest
public class PostRepositoryTest {
@Autowired
PostRepository postRepository;
@Test
public void crudRepository() {
// Given
Post post = new Post();
post.setTitle("hello spring boot common");
assertThat(post.getId()).isNull();
// When
Post newPost = postRepository.save(post);
// Then
assertThat(newPost.getId()).isNotNull();
// When
List<Post> posts = postRepository.findAll();
// Then
assertThat(posts.size()).isEqualTo(1);
assertThat(posts).contains(newPost);
// When
Page<Post> page = postRepository.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);
page = postRepository.findByTitleContains("spring",
PageRequest.of(0, 10));
assertThat(page.getTotalElements()).isEqualTo(1);
assertThat(page.getNumber()).isEqualTo(0);
assertThat(page.getSize()).isEqualTo(10);
assertThat(page.getNumberOfElements()).isEqualTo(1);
// When
long spring = postRepository.countByTitleContains("spring");
assertThat(spring).isEqualTo(1L);
}
}
* 참고!
- DataJpaTest 는 @Transactional 에서 기본으로 롤백이 적용되기 때문에
하이버네이트에서 쿼리 자체를 날리지 않는다.
'ORM > JPA' 카테고리의 다른 글
[# JPA] Pageable (0) | 2020.06.06 |
---|---|
SpringBoot + JPA QueryDSL 연동 (0) | 2019.10.08 |
Spring Security + JPA 로그인 구현 (String 아이디로 로그인 하기) (0) | 2019.09.26 |
Spring Security Login 기능 구현 (0) | 2019.09.24 |
스프링 데이터 JPA 커스텀 인터페이스 만드는 방법 (0) | 2019.09.24 |