[Mybatis]동적 결과 매핑(Dynamic Result Mapping) 예제

MyBatis를 사용하여 동적 결과 매핑을 수행하려면 SQL 쿼리의 결과에 따라 매핑할 결과 객체 및 컬럼을 동적으로 결정해야 합니다. 아래의 예제에서는 동적 결과 매핑을 수행하는 방법을 보여줍니다.

예제: 동적 결과 매핑

  1. 매퍼 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>` 
  1. 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 쿼리의 결과에 따라 동적으로 매핑할 수 있으므로 유연한 결과 처리가 가능합니다.