# Natice Query에 대한 단상
Springboot에서 네이티브 쿼리를 통한 개발을 해야할때가 간혹? 있다. 아니 솔직히 네이티브 쿼리로 개발하고 싶다.
왜냐하면 편하니까... 하지만 현재 개발자들이 네이티브 쿼리를 지향하고 있는 이유는 DB 및 테이블에 종속된다는 단점이 가장 큰거같다.
# 하지만 장점은 퍼포먼스 차원에서 생각해 볼때 네이티브 쿼리가 훨씬 빠르다.
아래의 실험 결과를 보면, 네이티브 쿼리가 퍼포먼스 측면에서 훨씬 빠르다.
https://stackoverflow.com/questions/60412667/performance-of-native-sql-query-and-jpa
# 네이티브 쿼리를 이용한 api 개발에 대해서 알아본다.
1. 컨트롤러에서 api를 생성한다.
@GetMapping("/searchtitle")
public List<BoardEntity> searchTitle(@RequestParam(value = "title") String title) {
return boardService.searchtitle(title);
}
- @GetMapping("/searchtitle") → 외부에서 url을 호출할때 사용하는 주소이다.
- public List<BoardEntity> searchTitle(@RequestParam(value = "title") String title) { → 외부 url 호출 시 인자값으로 title값을 넣어줘야 한다. (예시 : http://localhost:18081/api/board/searchtitle?title=안녕하세요)
- return boardService.searchtitle(title); → 입력받은 인자값을 가지고 boardService.searchtitle(title); 을 호출한다.
2. BoardService의 내용을 살펴보면 아래와 같다.
public List<BoardEntity> searchtitle(String title) {
return boardRepository.searchtitle(title);
}
- public List<BoardEntity> searchtitle(String title) { → List<BoardEntity>를 참조하여 컨트롤러에서 넘겨받은 인자값을 받는다.
- return boardRepository.searchtitle(title); → boardRepository.searchtitle(title) 해당 경로로 이동 후 값을 반환한다.
(return은 값을 반환해 와라! 라는 의미로 받아들이면 쉽다.)
3. BoardRepository의 내용을 보면 아래와 같다.
@Query(value = "select * from board where title = :title", nativeQuery=true)
List<BoardEntity> searchtitle(@Param("title") String title);
- @Query(value = "select * from board where title = :title", nativeQuery=true) → title을 변수값으로 받는 네이티브 쿼리이다. 해당 title은 api로 전달되는 외부 인자값이다.
- List<BoardEntity> searchtitle(@Param("title") String title); → 파라미터 값 title을 BoardEntity 를 참조하여 조회 후 반환한다.
- BoardEntity의 내용은 아래와 같다.
@Getter
@Setter
@ToString
@RequiredArgsConstructor
@AllArgsConstructor
@Builder
@Entity(name = "board")
@Table(name = "board")
public class BoardEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
@Column(name = "title")
private String title;
@Column(name = "description")
private String description;
@Column(name = "published")
private boolean published;
4. Postman과 브라우저에서 결과값 확인하기
- Postman
- 브라우저에서 확인
- 개인적으로 네이티브 쿼리 개발이 더 쉽다.
- JPQL은 네이티브 쿼리와 비슷한점도 있지만 다르다.
- 결론은 재미있다.
'⭐🌏 JPA > 🌏 Native Query' 카테고리의 다른 글
No results were returned by the query. 해결하기 (0) | 2022.08.31 |
---|