[JPA] NamedQueryBackend/Spring2022. 12. 9. 11:09
Table of Contents
반응형
Named Query 란
Entity에 @NamedQuery
어노테이션을 통해 쿼리를 지정해 줍니다. 쉽게 말하면 미리 이름을 부여해서 재활용할 수 있는 JPQL입니다.
사용 방법
- 도메인 클래스에
@NamedQuery
또는@NamedNativeQuery
를 정의합니다. - 2개 이상의 Query를 정의하려면
@NamedQueries
또는@NamedNativeQueries
를 사용하면 됩니다. - Primary Key 가 되는 칼럼은
@Id
를 사용하여 지정합니다. - 테이블의 칼럼명과 도메인 클래스의 필드명이 다를 경우
@Column
을 이용하여 지정할 수 있습니다.
클래스 생성
위의 설명의 어노테이션을 사용하여 도메인 클래스를 생성합니다.
@Entity
@NamedQueries({
@NamedQuery(name = "Team.query1", query = "select t.id from Team t where t.name = 'test1'"),
@NamedQuery(name = "Team.query2", query = "select t.name from Team t where t.name = ?1"),
})
@NamedNativeQueries({
@NamedNativeQuery(name = "Team.nativeQuery1", query = "select t.id from tb_team t where t.name = 'test1'"),
@NamedNativeQuery(name = "Team.nativeQuery2", resultClass = Team.class, query = "select * from tb_team t where t.name = '?1")
})
@Table(name = "tb_team")
public class Team {
@Id
private int id;
@Column(name = "name", nullable = false)
private String name;
private int rating;
}
Repository 생성
- Repository 인터페이스에 직접
@Query
를 이용하여 SQL문을 사용할 수 있습니다. nativeQuery
를 사용하려면 해당 필드를 true로 설정하면 됩니다.@Param
을 사용하여 Query문의 파라미터와 연결할 수 있습니다.entityName
을 사용하면 도메인 타입이 자동으로 설정됩니다.
public interface TeamRepository extends JpaRepository<Team, Integer> {
@Query(value = "select * from tb_team t where t.name = 'test1'", nativeQuery = true)
List<Team> testNativeQuery();
@Query(value = "select t.id from #{#entityName} t where t.name like :name%", nativeQuery = true)
List<String> testNativeQuery(@Param("name") String name);
List<Integer> query1();
List<String> query2(String name);
List<Integer> nativeQuery1();
List<Team> nativeQuery2(String name);
}
위와 같이 클래스에 Native 쿼리문을 작성하고 사용할 수 있습니다.
반응형
'Backend > Spring' 카테고리의 다른 글
[Spring] QuerydslRepositorySupport 사용 (0) | 2022.12.14 |
---|---|
[Spring] JPA with Querydsl (0) | 2022.12.14 |
[JPA] 쿼리 메서드 (0) | 2022.12.08 |
[JPA] @ElementCollection 사용 예 (0) | 2022.12.05 |
[Spring] Swagger Header 설정 방법 (0) | 2022.10.12 |
@고지니어스 :: 규니의 개발 블로그
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!