안녕하세요. hia의 개발 story입니다.
장점이 많은 Spring JPA이지만 복잡한 쿼리를 사용할 때에는 사용이 불편해집니다.
이런 불편함을 감소시키기 위해 @Query 어노테이션을 이용하여 JPQL문을 실행합니다.
JPQL은 일반 SQL처럼 사용가능하기 때문에 좀 더 복잡한 구문을 사용할 수 있습니다.
@Query를 이용한 select 구문 테스트
간단하게 select하는 예제를 보도록 하겠습니다.
아래와 같이 Repository 인터페이스에 @Query("쿼리문") 어노테이션을 이용하여 select 하는 함수를 만들어줍니다.
public interface SampleRepository extends JpaRepository<Sample, Long> {
@Query("select s from Sample s order by s.id")
List<Sample> getSampleList();
}
이제 만들어진 getSampleList를 테스트하는 테스트 구문을 작성합니다.
@SpringBootTest
public class SampleRepositoryTests {
@Autowired
SampleRepository sampleRepository;
@Test
public void testQuery(){
List<Sample> sample = sampleRepository.getSampleList();
sample.forEach(sample1 -> System.out.println(sample1));
}
}
그러면 이렇게 아래와 같이 결과가 나오게 됩니다.
@Qurey를 이용한 update 구문 테스트
이제 쿼리문에 where문을 이용하여 조건을 걸어보도록 하겠습니다.
쿼리에 파라미터로 값을 전달할때는 여러 가지 방식을 사용할 수 있습니다.
- ?1, ?2 와 같이 파라미터 순서를 이용하는 방법
- :파라미터명 와 같이 파라미터의 이름을 이용하는 방법
- #{} 와 같이 자바 빈 스타일을 이용하는 방법
여러 방법 중 상황에 맞게 편한 것을 골라서 사용하변 됩니다.
아직 저도 공부 중이라 :파라미터명 을 사용하여 테스트하였습니다.
public interface SampleRepository extends JpaRepository<Sample, Long> {
@Transactional
@Modifying
@Query("update Sample s set s.value = :value where s.id = :id")
int updateSampleValue(@Param("id") Long id, @Param("value") String value);
}
@SpringBootTest
public class SampleRepositoryTests {
@Autowired
SampleRepository sampleRepository;
@Test
public void testQuery(){
sampleRepository.updateSampleValue(10L, "SampleUpdate");
Optional<Sample> result = sampleRepository.findById(10L);
if(result.isPresent()){
Sample sample = result.get();
System.out.println(sample);
}
}
}
update 구문이 잘 작동하여 id 10의 value 값이 SampleUpdate로 잘 변경됨을 볼 수 있습니다.
이외에도 페이징처리 join을 이용할 시 Object로 리턴받는 방식 등 여러 가지 복잡한 구문들을 처리할 수 있습니다.
따로 JPA를 더 공부할 것이기 때문에 그건 별도로 정리하도록 하겠습니다.
'Springboot' 카테고리의 다른 글
[Spring Boot] Spring Boot + Thymeleaf 구조에서 decorate를 이용하여 layout 설정하기 (0) | 2023.08.08 |
---|---|
[Spring Boot] 쿼리메서드 - deleteBy 사용하기 (0) | 2023.06.12 |
[Spring Boot] JpaRepository에서의 쿼리메서드 (0) | 2023.03.31 |
[Spring Boot] JpaRepository의 페이징 및 정렬 처리 하기 (0) | 2023.03.22 |
[Spring Boot] JpaRepository를 이용한 CRUD 테스트 예제 공부 (0) | 2023.03.21 |