📚코드로 배우는 스프링 부트 웹 프로젝트를 통해 공부한 내용들을 정리해보았습니다.
74p - 78p
쿼리 메서드와 Pageable의 결합
MemoRepository 인터페이스의 변경
public interface MemoRepository extends JpaRepository<Memo, Long> {
List<Memo> findByMnoBetweenOrderByMnoDesc(Long from, Long to);
Page<Memo> findeByMnoBetween(Long from, Long to, Pageable pageable);
}
정렬 조건은 Pageable을 통해서 조절할 수 있습니다.
Pageable 파라미터는 모든 쿼리 메소드에 적용 가능합니다.
일반적인 경우 쿼리 메서드에 정렬 조건을 생략하고 만드는 경우가 많습니다.
MemoRepositoryTests 클래스의 일부
@Test
public void testQueryMethodWithPagle(){
Pageable pageable = PageRequest.of(0,10,Sort.by("Mno").descending());
Page<Memo> result = memoRepository.findByMnoBetween(10L,50L,pageable);
result.get().forEach(memo->System.out.println(memo));
}
실행결과
deleteBy로 시작하는 삭제 처리
쿼리 메소드를 이용해서 deleteBy로 메소드의 이름을 시작하면 특정 조건에 맞는 데이터를 삭제하는 것도 가능합니다.
@Commit
@Transactional
@Test
public void testDeleteQueryMethod(){
memoRepository.deleteMemoByMnoLessThan(10L);
}
@Commit @Transactional 어노테이션을 사용하는 이유?
deleteBy...인 경우 일단은 select문으로 해당 엔티티 객체들을 가져오는 작업과 각 엔티티를 삭제하는 작업이 같이 이루어지때문입니다. 만일, @Transcational이 없다면 에러가 발생합니다.
@Commit은 최종 결과를 커밋하기 위해서 사용합니다. 이를 적용하지 않으면 테스트 코드의 deleteBy..는 기본적으로 롤백( Rollback) 처리 되어서 결과가 반영되지 않습니다.
deleteBy는 실제 개발에서는 많이 사용되지 않는데 그 이유는 SQL을 이용하듯 한 번에 삭제가 이루어지는 것이 아니라 다음과 같이 각 엔티티 객체를 하나씩 삭제하기 때문입니다.
개발 시에는 @Query를 이용해서 위와 같은 비효율적인 부분을 개선합니다.
@Query는 다음 포스팅으로 가져오겠습니다.
'🏰 Back-end > Spring Boot' 카테고리의 다른 글
[Spring Boot] 제어문 처리 (0) | 2021.07.16 |
---|---|
[Spring Boot] 반복문의 상태 객체 (0) | 2021.07.15 |
[Spring Boot] Thymeleaf의 기본 사용법 (0) | 2021.07.14 |
[Spring Boot] 스프링 MVC와 Thymeleaf | 포트 번호 바꾸기 | 404 에러 해결 (0) | 2021.07.11 |
[Spring Boot] @Query 어노테이션 (0) | 2021.07.10 |
댓글