본문 바로가기
Back-End/Spring

JpaRepository

by sharekim 2021. 5. 12.

일반적인 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

댓글