동적 쿼리란?

jiji·2023년 11월 8일
1

DataBase

목록 보기
9/14

🔥 정적 쿼리(Static Query)

  • 미리 정의된 SQL 문장이나 JPQL 쿼리
  • 주로 애플리케이션의 고정된 데이터 접근 패턴을 다룰 때 사용됩니다. 이 쿼리는 컴파일 시 검증됩니다.
TypedQuery<Employee> query = entityManager.createQuery
	("SELECT e 
    FROM Employee e 
    WHERE e.firstName = 'John'", Employee.class);
List<Employee> results = query.getResultList();

🔥 동적 쿼리(Dynamic Query)

💡 즉, 동적 쿼리를 사용하면 사용자의 입력이나 프로그램의 상황에 따라 쿼리가 동적으로 변할 수 있습니다.

  • 동적 SQL요소를 사용해 동적 쿼리를 작성
    : <if>, <choose>, <where>, <when>, <otherwise>, <foreach>, <set>, <trim>
  • 런타임 중에 조건에 따라 쿼리를 생성하고 실행하는것을 의미합니다. 즉, 쿼리의 일부 또는 전체가 런타임 데이터나 사용자의 입력에 따라 변경됩니다.

  • 동적 쿼리란 상황에 따라 다른 문법의 SQL을 적용하는 것을 말한다.

  • 예를 들면 DB에서 값을 조회할 때 조회 조건이 동적으로 바뀌어야 하는 경우가 많다. 이런 상황을 Querydsl을 사용하면 손쉽게 해결할 수 있다.

if

<if test="keyword != null and keyword != ''">
  AND STR_RUL_ID = #{searchKeyword}
</if>

WHERE

<select id="getUserList" parameterType="map" resultType="User">
    SELECT * FROM users
    <where>
        <if test="name != null">
            AND name = #{name}
        </if>
        <if test="age != null">
            AND age = #{age}
        </if>
    </where>
</select>

SET절 (업데이트)

<update id="updateUser" parameterType="User">
    UPDATE users
    <set>
        <if test="name != null">
            name = #{name},
        </if>
        <if test="age != null">
            age = #{age},
        </if>
        <!-- 추가적인 필드들에 대한 동적 SET 구문 -->
    </set>
    WHERE user_id = #{userId}
</update>

🧐 QueryDsl이란?

QueryDsl은 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해주는 프레임워크이다.
ex. JPA

why

  • 쿼리를 문자가 아니라 진짜 자바 코드로 작성할 수 있게 도와준다.

0개의 댓글