본문 바로가기

CS 잡지식

동적(dynamic) 쿼리 vs 정적(static) 쿼리

동적이냐 정적이냐의 기준은 SQL [문자열]이 변경되냐 안 되냐이다.

EX) JPQL : SELECT m FROM Member m WHERE m.username = :username

-> 파라미터 [:username]이 있어서, 동적 쿼리로 보이지만 이건 [정적] 쿼리이다. 

왜냐하면, SQL문이 저기서 변하지 않기 때문!

EX

@Data // 검색 조건(selection condition) : 이 조건들을 가지고 동적 쿼리를 만든다.
public class MemberSearchCondition {

    //회원명, 팀명, 나이(ageGoe,ageLoe)

    private String username;
    private String teamName;
    private Integer ageGoe;
    private Integer ageLoe;



}

클라이언트에서 쿼리 메서드를 호출을 할때, 위와 같은 Condition 클래스를 만들어서, 검색 조건, 

즉, 필터링 조건을 넣었다고 하자. 

만약 username으로만 필터링을 한다고 하고, 나머지 3개의 필드에 대해서는 필터링 조건으로 넣지 않겠다고 하면, 

JPQL문은 아래와 같이 된다. 

JPQL : SELECT m FROM Member m WHERE m.username = :username

만약 그 어떤 필터링도 하지 않겠다고 하면 JPQL은 아래와 같이 된다. 

JPQL : SELECT m FROM Member 

-> 즉, SQL [문자열] 자체가 조건에 따라 바뀌고 있으므로, 이것은 [동적] 쿼리이다.