insert : save(entity 객체)
select : findById(키 타입), getOne(키 타입)
update : save(entity 객체)
delete : deleteById(키 타입), delete(엔티티 객체)
insert와 update작업에 사용하는 메서드가 동일하게 save()를 이용하는데 JPA의 구현체가 메모리상에서 객체를 비교하고 없다면 insert, 존재하면 update를 동작시키는 방식이기 때문입니다.
이제 아래처럼 MemoRepository 인터페이스를 만들어 줍니다.
import org.springframework.data.jpa.repository.JpaRepository;
import org.zerock.ex2.entity.Memo;
public interface MemoRepository extends JpaRepository<Memo, Long> {
}
정말이지 놀랍게도 JpaRepository 인터페이스를 상속하는 것만으로 모든 작업이 끝납니다. JpaRepository를 사용할 때는 엔티티의 타입 정보(예제에서는 Memo 클래스 타입을 사용), @Id의 타입을 지정합니다.
Spring Data JPA는 인터페이스 선언만으로도 자동으로 스프링의 bean으로 등록해준다는 사실...!(스프링이 내부적으로 인터페이스 타입에 맞는 객체를 생성해서 빈으로 등록해줍니다.) 사실 이 예제를 따라서 작성 하던 중, jpa로 테이블이 만들어 지지 않는 상황이 발생했습니다. 아니 부트는 자동으로 다 된다며! 왜 안 돼???하면서 천천히 살펴보는데 오타가 난 것도 아니라서 저자님의 카페와 깃허브를 찾아 긁어서 복붙해도 안 돼서 절망에 빠져있던 중.... 프로젝트를 다시 새로 만들고 하니까 잘만 되더라고요 ........? 인텔리제이와 부트.... JPA가 처음이라 그런건지....... ㅎ...
이제 Test할 클래스를 만들어 줍니다.
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.zerock.ex2.entity.Memo;
import java.util.stream.IntStream;
@SpringBootTest
public class MemoRepositoryTests {
@Autowired
MemoRepository memoRepository;
@Test public void testClass(){
System.out.println("__________"+memoRepository.getClass().getName());
}
@Test
public void testInsertDummies(){
IntStream.rangeClosed(1,100).forEach(i->{
Memo memo = Memo.builder().memoText("테스트_____"+i).build();
memoRepository.save(memo);
});
}
}
실행하면 어떤 화면이 나오느냐!
Hibernate:
insert
into
tbl_memo
(memo_text)
values
(?)
이게 위에서 지정한 수대로 100회가 찍힙니다.
잘 들어가있는 것을 확인할 수 있습니다
'Spring + Boot' 카테고리의 다른 글
JPA 페이징 / 정렬 처리하기 (0) | 2021.04.08 |
---|---|
JPA 조회 / 수정 / 삭제 테스트 (0) | 2021.04.08 |
JPA 관련 application.properties 파일 (0) | 2021.04.07 |
Spring data JPA - 기초 1 (@Entity? @Table? 그게 뭐야?) (0) | 2021.04.06 |
Spring data JPA - ORM과 JPA (0) | 2021.04.06 |