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()로 대체되었다.
반응형