TypedQuery<Employee> query = entityManager.createQuery
("SELECT e
FROM Employee e
WHERE e.firstName = 'John'", Employee.class);
List<Employee> results = query.getResultList();
💡 즉, 동적 쿼리를 사용하면 사용자의 입력이나 프로그램의 상황에 따라 쿼리가 동적으로 변할 수 있습니다.
- 동적 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은 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해주는 프레임워크이다.
ex. JPA
why
- 쿼리를 문자가 아니라 진짜 자바 코드로 작성할 수 있게 도와준다.