Spring boot

[Spring Boot] JPA 조회 작업 findById(), getOne()의 차이

민뭉아치 2022. 3. 29. 00:25

JpaRepository의 구현체 TestRepository

public interface MemoRepository extends JpaRepository<Memo, Long> {
}

findById()

java,util 패키지의 Optional type으로 반환한다. (결과가 존재하는지 체크 가능)

findById()는 실행하는 순간 SQL은 처리 된다. 

public void testSelect() {
    Long mno = 10L;

    Optional<Memo> result = memoRepository.findById(mno);
    System.out.println("************");
    if (result.isPresent()) {
        Memo memo = result.get();
        System.out.println(memo);
   }
}

아래의 결과를 보면 SQL이 처리된 후 Memo를 print한 결과를 볼 수 있다.

getOne() 

@Transactional 어노테이션이 필요하다.

@Transactional 어노테이션은 트랜잭션 처리를 위해 사용한다.

getOne()은 해당 객체를 리턴한다.

실제 객체가 필요한 순간까지 SQL을 실행하지 않고 실제 객체를 사용하는 순간 SQL이 동작한다.

@Test
@Transactional
public void testSelect() {
    Long mno = 10L;

    Memo memo = memoRepository.getOne(mno);
    System.out.println("************");
    System.out.println(memo);
}

아래의 결과를 보면 getOne()으로 리턴된 memo를 print하여 사용하는 시점에서 SQL이 처리된결과를 볼 수 있다.

 

geOne()은 getById()로 대체되었다.

반응형