Cute Running Puppy
본문 바로가기
개발일기/Java

nativeQuery 사용법

by 징구짱 2023. 4. 11.
728x90

✏️ nativeQuery = false 사용법

@Query(value = " SELECT u FROM User u ", nativeQuery = false)

List<User> example();


@Query : 직접 Query로 조회 가능

u : select u.* from user u 에서 u.*에 해당

User : 객체, 직접 query로 조회할 때는 테이블 명이 users이지만 JPA에서는 User객체로 조회

, nativeQuery = false : false일 때 생략 가능 

List<User> : 조회된 객체 자체의 List로 받을 수 있음

 

 

✏️ nativeQuery = true와 다른점?

→ 진짜 쿼리이기때문에 조회할 때 조금씩 다르다

 

@Query(value = " SELECT * FROM users u ", nativeQuery = true)

List<User> example();


* : u → *

users  : User → users

, nativeQuery = true: true일 때 생략 불가능 

 

 

✏️ 또 다른 예시

  • Board 객체 안에 User 객체가 연관되어있을 때

@Query(value = " SELECT b.user.id FROM Board b ")

b.user.id : Board 객체User객체 안의 id컬럼을 가져옴

 

@Query(value = " SELECT b.user_id FROM Board b ", nativeQuery = true)

b.user_id : board 테이블에 fk인 user_id 컬럼을 가져옴

 

 

✏️ nativeQuery = false일 때 Dto로 받고 싶다면?

@Query(value = "  select new com.example.emotrak.dto.DailyMonthResponseDto( d.id, d.day, d.emotion.id, d.detail )"
                        + "    from Daily d "
                        + " where d.year = :Year ")

List<DailyMonthResponseDto> getDailyMonth(@Param("Year") int year);


new : 조회 결과로 Dto를 생성

com.example.emotrak.dto.DailyMonthResponseDto : 생성할 Dto와 그 경로

d.id, d.day, d.emotion.id, d.detail : 생성자에 해당하는 매개변수를 작성

d.emotion.id : 위의 또 다른 예시처럼 이것은 emotion테이블의 id 컬럼

:Year : 변하는 값을 정의

@Param("Year") int year : 변하는 값에 넣어줄 변수 변하는 값의 : 뒷부분과 @Param 내부 똑같이 맞추기

 

 

✏️ nativeQuery = true일 때 Dto로 받고 싶다면?

https://pingu514.tistory.com/67

 

nativeQuery 원하는 Dto로 가져오기

nativeQuery = false일 때 복잡한 Query를 사용해보려 했는데 서브쿼리가 포함되면 자꾸 에러가 나서... nativeQuery를 사용해보려고 했는데 컬럼 하나만을 조회할 때는 int, String 등등 잘 맵핑이 됐는데 원

pingu514.tistory.com

 

728x90