일반적인 CRUD가 필요한 경우 CrudRepository를 사용해도 되지만,
특별한 경우가 아니라면 JpaRepository를 선택하는 것이 무난하다.
사용방법
public interface MemoRepository extends JpaRepository<Memo, Long> {
}
너무나도 간단하다. 사용하려는 Repository Class에 JpaRepository 인터페이스를 구현하는 것으로 생성이 끝난다.
Spring Data JPA가 자동으로 해당 인터페이스에 맞는 코드를 생성해준다.
JpaRepository를 사용할 때는 엔티티의 ㅏ입정보와 @Id의 타입을 지정해줘야 한다.(JpaRepository<Memo, Long>)
메서드
- Insert 작업 : save(엔티티 객체)
- select 작업 : findById(키 타입), getOne(키 타입)
- update 작업 : save(엔티티 객체)
- delete 작업 : deleteById(키 타입), delete(엔티티 객체)
의존성 주입 테스트
@SpringBootTest
public class MemoRepositoryTests {
@Autowired
MemoRepository repo;
@Test
public void testClass() {
System.out.println(repo.getClass().getName());
}
jpaRepository.getClass().getName();를 출력하는 테스트로 의존성이 잘 주입 되었는지 확인할 수 있다.
결과는 com.sun.proxy.$ProxyXX 와 같은 형태로 출력된다.
CRUD 테스트
@Test
public void testInsertDummies() {
IntStream.rangeClosed(1, 100).forEach(i -> {
Memo memo = Memo.builder().memoText("sample..." + i).build();
repo.save(memo);
});
}
@Transactional
@Test
public void testSelect(){
Long mno = 100L;
Memo memo = repo.getOne(mno);
System.out.println("=======================================");
System.out.println(memo);
// if(result.isPresent()){
// Memo memo = result.get();
// System.out.println(memo);
// }
}
@Test
public void testUpdate(){
Memo memo = Memo.builder().mno(100L).memoText("Update Text").build();
System.out.println(repo.save(memo));
}
@Test
public void testDelete(){
Long mno = 100L;
repo.deleteById(mno);
}
특이점으로는 findById()는 먼저 SQL을 처리하고 출력을 하고
<SQL 조회>
System.out.println("=======================================");
System.out.println(memo);
getOne()의 경우 객체를 사용하기 전에 SQL을 조회한다는 것입니다.
System.out.println("=======================================");
<SQL 조회>
System.out.println(memo);
'Back-End > Spring' 카테고리의 다른 글
쿼리 메서드, @Query (0) | 2021.05.12 |
---|---|
JPA Paging(Page, Pageable, PageRequest, Sort) (0) | 2021.05.12 |
엔티티 클래스 (0) | 2021.05.12 |
Spring Context Root 경로 (Resources 경로) (0) | 2021.03.21 |
Spring AOP 용어 정리 (0) | 2021.03.21 |
댓글