스프링데이터 + JPA/스프링 데이터 JPA

11. @Query, 메소드에 쿼리 정의

sdafdq 2023. 11. 20. 11:46

그냥

@Query("select m from Member m where m.username = :username and m.age = :age")
List<Member> findUser(@Param("username") String username, @Param("age") int age);

이렇게 곧바로 쓰는거다.

 

이거는 네임드쿼리를 곧바로 쓰는거라고 보면 된다.

@Query("select m from Member m where m.username = :username and m.age = :age") 
List<Member> findUser(@Param("username") String username, @Param("age") int age);

@Query("쿼리와 :파라미터")
List<엔티티> 메소드명(@Param("쿼리상파라미터명") 타입 파라미터값);

그래서 이것도 네임드쿼리와 마찬가지로 로딩 시점에 sql로 만들기 위해 다 파싱을 미리 해 놓는데, 거기서 문법오류가 발생하면 오류를 발생시킨다. unnamed 네임드쿼리? 음.. 그냥 unnamed쿼리?

 

이건 실무에서 자주 씀.

메소드명으로 자동쿼리생성은 하다보면 메소드명 자체가 엄청 길어질 때가 있는데,

그 때 그냥 간단한 메소드 이름과 함께 저렇게 쿼리로 풀어서 쓰면 됨.

 

메소드명으로 자동쿼리 생성은 간단한거 할 때,

좀 조건이 길면 그냥 저렇게 쿼리로 풀어서.

 

지금까지 정적 쿼리였고, 동적쿼리는 QueryDSL로 해야 함.