[Mybatis]동적 결과 매핑(Dynamic Result Mapping) 예제
MyBatis를 사용하여 동적 결과 매핑을 수행하려면 SQL 쿼리의 결과에 따라 매핑할 결과 객체 및 컬럼을 동적으로 결정해야 합니다. 아래의 예제에서는 동적 결과 매핑을 수행하는 방법을 보여줍니다.
예제: 동적 결과 매핑
-
매퍼 XML 파일 작성:
동적 결과 매핑을 수행하기 위해 MyBatis XML 매퍼 파일에
<sql>
요소를 사용하여 매핑할 결과 객체 및 컬럼을 동적으로 선택할 수 있는 SQL 코드를 작성합니다.
<!-- DynamicResultMapper.xml -->
<mapper namespace="com.example.DynamicResultMapper">
<!-- 결과 매핑을 동적으로 선택하는 SQL -->
<sql id="resultMapping">
<choose>
<when test="dynamicResultType == 'A'">
SELECT id, name FROM table_a
</when>
<when test="dynamicResultType == 'B'">
SELECT id, description FROM table_b
</when>
</choose>
</sql>
<!-- 실제 쿼리에서 동적 결과 매핑 사용 -->
<select id="dynamicResultQuery" parameterType="map" resultType="dynamic">
<include refid="resultMapping" />
WHERE condition_column = #{conditionValue}
</select>
</mapper>`
-
Java 코드에서 동적 결과 매핑:
Java 코드에서는
dynamicResultType
파라미터를 조절하여 동적으로 결과를 매핑합니다. 이 예제에서는 결과 객체를 동적으로 선택하기 위해resultType="dynamic"
을 사용하였습니다.
@SpringBootApplication
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
@Autowired
private SqlSession sqlSession;
public void queryWithDynamicResultMapping() {
Map<String, Object> parameters = new HashMap<>();
parameters.put("dynamicResultType", "A"); // 'A' 또는 'B'
parameters.put("conditionValue", "example_value");
// MyBatis로 동적 결과 매핑을 수행하는 쿼리 실행
List<Map<String, Object>> results = sqlSession.selectList("com.example.DynamicResultMapper.dynamicResultQuery", parameters);
for (Map<String, Object> result : results) {
System.out.println("Result ID: " + result.get("id"));
System.out.println("Result Name/Description: " + result.get("name"));
}
}
}`
위의 예제에서는 <choose>
요소를 사용하여 동적 결과 매핑을 수행하고, Java 코드에서는 dynamicResultType
파라미터를 통해 결과를 선택합니다. 결과 객체와 컬럼은 resultType="dynamic"
을 사용하여 동적으로 결정됩니다.
동적 결과 매핑을 사용하면 SQL 쿼리의 결과에 따라 동적으로 매핑할 수 있으므로 유연한 결과 처리가 가능합니다.