
WHERE절에 조건이 여러 개 필요한 경우:SELECT * FROM menu
WHERE category = ?
AND price >= ?
AND available = ?
AND created_date >= ?
AND seller = ?;
WHERE에 ?도 5개 → 필요한 조건 개수만큼 쿼리를 매번 다 작성해야 함mapper.xml:
<select id="findMenu" resultType="MenuDTO">
SELECT *
FROM menu
<where>
<if test="category != null">
AND category = #{category}
</if>
<if test="price != null">
AND price >= #{price}
</if>
<if test="available != null">
AND available = #{available}
</if>
</where>
</select>
category, price, available 값이 있으면 → 조건이 자동으로 추가됨<mapper namespace="com.haenin.dynamic.MenuMapper">
→ 이 XML이 MenuMapper 인터페이스와 1:1 매칭
<select id="...">
id: 인터페이스 메서드명과 동일해야 함
parameterType: 이 쿼리가 어떤 타입의 파라미터를 받는지에 대한 선언
(실제 동작은 “실제로 넘어온 객체” 기준), 생략 가능
값은 자바 타입(풀네임)이나 별칭을 넣을 수 있음
중요: MyBatis는 최종적으로 실제로 넘어온 객체를 기준으로 동작
parameterType="list"라고 적혀 있어도 자바에서 SearchCriteria를 넘기면 그 객체의 필드(condition, value)로 OGNL을 평가해서 동작
resultMap
결과(ResultSet)를 어떻게 자바 객체로 매핑할지 가리키는 매핑 규칙의 id
위에서 정의한 <resultMap id="menuResultMap"> 매핑 규칙 사용
(컬럼명 → DTO 필드로 정확히 바인딩)