[Mybatis] 매퍼 상속 개념과 예제

MyBatis에서 매퍼 상속은 코드 재사용과 유지보수를 쉽게 하기 위해 사용되는 기능입니다. 상속을 통해 공통된 쿼리나 매핑을 하위 매퍼에서 재활용할 수 있습니다. 아래에 매퍼 상속의 개념과 예제를 제공하겠습니다.

  1. 매퍼 상속 개념:

매퍼 상속은 자식 매퍼가 부모 매퍼의 내용을 상속받아 사용하는 기능을 의미합니다. 부모 매퍼에 공통된 SQL 쿼리나 매핑을 정의하고, 자식 매퍼에서는 이를 재활용하여 중복을 줄이고 코드를 간결하게 관리할 수 있습니다.

  1. 매퍼 상속 예제:

부모 매퍼인 BaseUserMapper.xml에서 공통된 쿼리를 정의하겠습니다.

<!-- BaseUserMapper.xml -->
<mapper namespace="your.package.BaseUserMapper">
    <select id="selectUserById" resultType="your.package.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
    <!-- 나머지 공통 쿼리들 -->
</mapper>` 

자식 매퍼인 UserMapper.xml에서는 상속을 통해 부모 매퍼의 쿼리를 사용하겠습니다.

<!-- UserMapper.xml -->
<mapper namespace="your.package.UserMapper">
    <include resource="your/package/BaseUserMapper.xml"/>

    <!-- 자식 매퍼에서 추가적인 쿼리 등 정의 -->
</mapper>` 

위의 예제에서 include 요소를 사용하여 BaseUserMapper.xml의 내용을 상속하였습니다. 이제 UserMapper.xml 내에서 selectUserById와 같은 쿼리를 사용할 수 있습니다.

SqlSessionFactory sqlSessionFactory = ...; // SqlSessionFactory 생성

SqlSession sqlSession = sqlSessionFactory.openSession();

UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

User user = userMapper.selectUserById(1); // 부모 매퍼에서 상속받은 쿼리 사용

sqlSession.close();` 

이렇게 매퍼 상속을 사용하면 공통된 쿼리를 중복 정의하지 않고도 여러 매퍼에서 활용할 수 있습니다. 코드의 재사용성을 높이고 유지보수를 용이하게 할 수 있는 장점이 있습니다.